Java中的双字节字符

时间:2014-04-07 00:17:59

标签: java unicode-string

下面的代码将字节存储的长度打印到包含双字节日文字符的String下面。根据我的理解,这个程序的输出应该是2,但是它会变成3.为什么这样呢?

String j = "大";     
System.out.println(j.getBytes().length);

如果情况总是如此,那么我应该在下面假设:

1,对于单字节字符,程序的输出将始终为1

2,对于双字节字符,程序的输出将始终为3

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,也不要使用任何其他使用默认系统编码的方法或类。您将在另一台计算机上运行您的代码,它将停止工作。