Java String.codePointAt返回意外值

1 java string encoding

如果我使用33到127之间的任何ASCII字符,则该codePointAt方法将给出正确的十进制值,例如:

String s1 = new String("#");
int val = s1.codePointAt(0);
Run Code Online (Sandbox Code Playgroud)

这将返回35,这是正确的值。

但是,如果我尝试使用从128到255的ASCII字符(扩展的ASCII / ISO-8859-1),则此方法给出了错误的值,例如:

String s1 = new String("ƒ")  // Latin small letter f with hook
int val = s1.codePointAt(0);
Run Code Online (Sandbox Code Playgroud)

根据该参考表,这应该返回159 ,但是返回409,为什么呢?

McD*_*ell 5

但是,如果我尝试使用128到255之间的ASCII字符

ASCII值在此范围内。它仅使用7位。

Java字符为UTF-16(仅此而已!)。如果要使用Java表示ASCII,则需要使用字节数组。

codePointAt方法返回32位代码点。16位字符不能包含整个Unicode范围,因此必须将某些代码点分为两个字符(按照UTF-16编码方案)。该codePointAt方法有助于解析为字符代码点。

我在这里编写了Java编码的粗略指南。