如果我使用从 33 到 127 的任何 ASCII 字符,codePointAt
方法会给出正确的十进制值,例如:
String s1 = new String("#");
int val = s1.codePointAt(0);
这将返回 35,这是正确的值。
但是如果我尝试使用从 128 到 255 的 ASCII 字符(扩展的 ASCII/ISO-8859-1),此方法会给出错误的值,例如:
String s1 = new String("ƒ") // Latin small letter f with hook
int val = s1.codePointAt(0);
这应该根据 this reference table 返回 159 ,而是返回 409,这是为什么?
最佳答案
But if I try use ASCII characters from 128 to 255
ASCII 没有此范围内的值。它只使用 7 位。
Java 字符是 UTF-16(仅此而已!)。如果要用Java表示ASCII,就需要使用字节数组。
codePointAt
方法返回 32 位代码点。 16 位字符不能包含整个 Unicode 范围,因此一些代码点必须分成两个字符(根据 encoding scheme for UTF-16 )。 codePointAt
方法有助于解析字符代码点。
我写了一个粗略的 Java 编码指南 here .
关于Java String.codePointAt 返回意外值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3948876/