下面的代码将字节存储的长度打印到包含双字节日文字符的String下面。根据我的理解,这个程序的输出应该是2,但是它会变成3.为什么这样呢?
String j = "大";
System.out.println(j.getBytes().length);
如果情况总是如此,那么我应该在下面假设:
1,对于单字节字符,程序的输出将始终为1
2,对于双字节字符,程序的输出将始终为3
答案 0 :(得分:2)
UTF 8个字符的字节长度可以在1到4个字节之间。因此,您的代码将打印输入日语字符的正确字节长度。
答案 1 :(得分:2)
我相信该字符的代码点是0x5927
,当表示为UTF-8时,它是三个字节E5 A4 A7
。 (并非所有非ASCII字符在UTF-8中占用3个字节,只有代码点在0x0800和0xFFFF范围内的字节。)
答案 2 :(得分:2)
.getBytes()
方法使用默认的系统编码(在Linux的情况下,它通常是UTF-8)。
由于您提到了“单字节”和“双字节日文字符”,我想您想使用SJIS编码。你这样做:
String j = "大";
System.out.println(j.getBytes("SJIS").length);
打印2
。
作为指导原则,请勿在未指定编码的情况下使用.getBytes
,也不要使用任何其他使用默认系统编码的方法或类。您将在另一台计算机上运行您的代码,它将停止工作。