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