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

时间:2015-04-15 11:15:42

标签: java character-encoding utf-16

我有一个文件,当显示 geanny *显示 UTF-16BE 时。如果我尝试将 Java 中的此文件转换为其他编码(假设 ISO-8859-1 ),则假设它是 UTF-16BE ,每次在新创建的文件的开头出现问号(?)。如果我认为它是在 UTF-16 (某些事情不是真的),转换后的文件转换为ok,开头没有任何问号。 任何人都可以澄清这种行为的原因吗?

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 是一个文本编辑器

1 个答案:

答案 0 :(得分:5)

您的问题是BOM(Byte Order Mark)。

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

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