java 中的 UTF-16BE 和 UTF-16 问题
UTF-16BE and UTF-16 issue in java
我有一个文件,当用 geanny * 显示时显示 UTF-16BE。如果我尝试将 Java 中的此文件转换为不同的编码(比方说 ISO-8859-1),假设它是UTF-16BE,每次新建文件开头都会出现问号(?)。相反,如果我假设它是 UTF-16(事实并非如此),则转换后的文件转换正常,开头没有任何问号。
谁能解释为什么会出现这种行为?
波纹管是我使用的代码片段:
StringBuilder sb = new StringBuilder();
BufferedReader buff = new BufferedReader(new InputStreamReader(inputStream, utf16beCharset));
String line = null;
while ( (line = buff.readLine()) != null) {
sb.append(line);
sb.append('\n');
}
String output = new String(sb.toString().getBytes(neededCharset), neededCharset);
System.out.println(output);
* geanny 是一个文本编辑器
您的问题是 BOM (Byte Order Mark)。
如果您将字符集定义为UTF-16
,则Java会识别BOM并在读取后将其删除。然后 BOM 告诉 Java 字符流是 (UTF-16)BE.
如果您定义 UTF-16BE
然后您告诉 Java 忽略 BOM,并且 Java 忽略它并将其写入您的目标文件。
我有一个文件,当用 geanny * 显示时显示 UTF-16BE。如果我尝试将 Java 中的此文件转换为不同的编码(比方说 ISO-8859-1),假设它是UTF-16BE,每次新建文件开头都会出现问号(?)。相反,如果我假设它是 UTF-16(事实并非如此),则转换后的文件转换正常,开头没有任何问号。 谁能解释为什么会出现这种行为?
波纹管是我使用的代码片段:
StringBuilder sb = new StringBuilder();
BufferedReader buff = new BufferedReader(new InputStreamReader(inputStream, utf16beCharset));
String line = null;
while ( (line = buff.readLine()) != null) {
sb.append(line);
sb.append('\n');
}
String output = new String(sb.toString().getBytes(neededCharset), neededCharset);
System.out.println(output);
* geanny 是一个文本编辑器
您的问题是 BOM (Byte Order Mark)。
如果您将字符集定义为UTF-16
,则Java会识别BOM并在读取后将其删除。然后 BOM 告诉 Java 字符流是 (UTF-16)BE.
如果您定义 UTF-16BE
然后您告诉 Java 忽略 BOM,并且 Java 忽略它并将其写入您的目标文件。