1

我想知道它的 java String 和字节表示。我有一个以 UTF-16 little endian 编码的文件,当我在 hexeditor 中查看它时,我可以看到

ff fe 61 00 f3 00 61 00 00

现在,当我使用

 BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName),"UTF-16"));
    StringBuilder builder = new StringBuilder();
    String line;

    while ((line = reader.readLine()) != null)
        builder.append(line);
    System.out.println(Arrays.toString(builder.toString().getBytes()));

我可以在输出中看到

[97, -13, 97]

如果我正在打印字节,为什么我看不到在我的 hexeditor 中可以看到的零?

4

1 回答 1

3

这是因为 Java 不会将 UTF-16 格式的字符串保存在内存中,这会很浪费,并且因为 getBytes 返回默认系统字符集(在您的机器上可能不是 UTF-16)javadoc中的字符串。正确的重载将是 getBytes("UTF-16") - 这样您应该会在末尾看到 0 填充,并且可能在开头看到 BOM (ff fe)。

于 2012-10-05T08:30:33.467 回答