Java字符串 - UTF和字节表示

时间:2012-10-05 08:20:59

标签: java string encoding

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

ff fe 61 00 f3 00 61 00 00

现在,当我使用

将其加载到Java时
 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中看到的零值?

1 个答案:

答案 0 :(得分:3)

这是因为Java不会将UTF-16格式的字符串保留在内存中,这会浪费,并且因为getBytes返回默认系统字符集中的字符串(在您的计算机上可能不是UTF-16){ {3}}。正确的重载是getBytes(“UTF-16”) - 这样你应该在结尾处看到0填充,并且可能在开头看到BOM(ff fe)。