日本字符 - 字节长度

San*_*yan 3 java character-encoding

日本字符的长度,不同于美国字符的长度。

例子:

String str = new String("????");
int numBytes = str.getBytes().length;   12 

for Us:
String str = new String("san");
int numBytes = str.getBytes().length;   3
Run Code Online (Sandbox Code Playgroud)

我应该如何获得与美国字符完全相同的 JAPAN 字节长度。

对于单个 JAPAN 字符,为什么它给出 2 个字节,有时它为单个 JAPAN 字符给出 3 个字节。

请告诉我如何在java中获取JAPAN字符的字节值

T.J*_*der 5

什么getBytes叫不带参数的回报将取决于您的系统。从该文档:

使用平台的默认字符集将此 String 编码为字节序列,并将结果存储到新的字节数组中。

因此,例如,如果您系统的默认编码是 UTF-8,则编码一个日语字符可能需要四个字节,但编码一个美国英语字母字符通常只需要一个字节。Unicode 常见问题解答中的更多信息。

有一些重载getBytes可让您指定要使用的编码。

更多背景:

Java 的字符串使用 UTF-16 表示(这就是为什么 Java 可以使用整个 Unicode 即使char只有 16 位宽)。在 UTF-16 中,char可能需要多个s 来表示一个“字符”(在 Unicode 的说法中,可能需要多个代码单元来表示一个代码点)。如果要访问字符串中的代码点数,可以使用codePointCount; 要访问代码点,您可以使用codePoints流。String还有其他一些与代码点相关的方法,只需在 JavaDoc 中搜索“代码点”即可。

所有与 相关的String,特别是;转换为字节数组后,您可能会使用 UTF-16 以外的编码。