有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java字符串UTF和字节表示

我想知道它的java字符串和字节表示。我有一个用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中可以看到的零字节


共 (1) 个答案

  1. # 1 楼答案

    这是因为Java没有将UTF-16格式的字符串保存在内存中,这将是一种浪费,而且因为getBytes以默认的系统字符集(在您的机器上可能不是UTF-16)返回字符串javadoc。正确的重载应该是getBytes(“UTF-16”)——这样你应该在结尾看到0填充,可能在开头看到BOM(ff fe)