Java String.codePointAt 返回意外值
如果我使用 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);
这应该根据 这个引用表,却返回409,这是为什么呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
ASCII 没有此范围内的值。它仅使用 7 位。
Java 字符是 UTF-16(没有别的!)。如果要使用Java表示ASCII,则需要使用字节数组。
codePointAt
方法返回 32 位代码点。 16 位字符不能包含整个 Unicode 范围,因此某些代码点必须分成两个字符(根据 UTF-16 的编码方案)。codePointAt
方法有助于解析为字符代码点。我在这里编写了 Java 编码的粗略指南 here 。
ASCII doesn't have values in this range. It only uses 7 bits.
Java chars are UTF-16 (and nothing else!). If you want to represent ASCII using Java, you need to use a byte array.
The
codePointAt
method returns the 32-bit codepoint. 16-bit chars can't contain the entire Unicode range, so some code points must be split across two chars (as per the encoding scheme for UTF-16). ThecodePointAt
method helps resolve to chars code points.I wrote a rough guide to encoding in Java here.
Java 字符未采用 ISO-8859-1 进行编码。它们使用 UTF-16,它对于 7 位 ASCII 字符具有相同的值(仅限 0-127 的值)。
要获得 ISO-8859-1 的正确值,您必须使用
将字符串转换为 byte[]并查看字节数组。String.getBytes("ISO-8859-1");
更新
ISO-8859-1 不是扩展 ASCII 编码,请使用
String.getBytes("Cp437");
获取正确的值。Java chars are not encoded in ISO-8859-1. They use UTF-16 which has the same values for 7bit ASCII characters (only values from 0-127).
To get the correct value for ISO-8859-1 you have to convert your string into a byte[] with
and look in the byte array.String.getBytes("ISO-8859-1");
Update
ISO-8859-1 is not the extended ASCII encoding, use
String.getBytes("Cp437");
to get the correct values.在统一码中
in Unicode
String.codePointAt 返回此指定索引处的 Unicode 代码点。
f 的 Unicode 代码点是 402,请参阅
http://www.decodeunicode.org/de /u+0192/properties
因此
打印
402
是正确的。如果您对其他字符集中的表示感兴趣,可以通过 getBytes(String charsetName):
String.codePointAt returns the Unicode-Codepoint at this specified index.
The Unicode-Codepoint of ƒ is 402, see
http://www.decodeunicode.org/de/u+0192/properties
So
printing
402
is correct.If you are interested in the representation in other charsets, you can printout the bytes representaion of the character in other charsets via getBytes(String charsetName):