java中的UTF-16BE和UTF-16问题



我有一个文件,当用geanny*显示UTF-16BE时。如果我试图将Java中的此文件转换为不同的编码(比如ISO-8859-1),假设它是UTF-16BE,则每次新建文件的开头都会出现一个问号(?)。相反,如果我假设它在UTF-16中(这不是真的),则转换后的文件转换正常,一开始没有任何问号。有人能澄清为什么会有这种行为吗?

Bellow是我使用过的代码中的一个片段:


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(字节顺序标记)。

如果将字符集定义为UTF-16,则Java会识别BOM并在读取后将其删除。BOM然后告诉Java字符流是(UTF-16)BE。

如果您定义了UTF-16BE,那么您会告诉Java忽略BOM,Java会忽略它并将其写入目标文件。

最新更新