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 忽略它并将其写入您的目标文件。