Java日语字符串大小(以字节为单位)

vs7*_*777 2 java encoding

我正在尝试计算日语字符串的长度'汉字仮名交じり文':

    String testStr = "????????";
    try {
        System.out.println("Length : " + testStr.getBytes("UTF-16").length);
    }
        catch(Exception ex) {
        ..... 
    }
Run Code Online (Sandbox Code Playgroud)

字符串中有8个字符,这个摘录打印:18.为什么它是18?

小智 7

它是18,因为你有8个字符,每个字符编码为UTF-16,这意味着每个2字节.因此,这是8*2 = 16加上在字节数组的开头插入的2字节BOM!

这是你的字节序列(feff是所谓的BOM或字节顺序标记,它允许检测字节序列是使用小端或大端字节顺序):

fe ff 6f 22 5b 57 4e ee 54 0d 4e a4 30 58 30 8a 65 87
Run Code Online (Sandbox Code Playgroud)

这就是我打印字节序列的方式(粗略的代码只用于测试这个当然):

final String text = "????????";
byte[] bytes = text.getBytes("UTF-16");
for (int i=0; i<bytes.length; ++i) {
    System.out.printf("%02x ", bytes[i]);
}
Run Code Online (Sandbox Code Playgroud)