Unicode字符问题

waiwai 2007-01-11 08:57:28
import java.util.*;

public class CharTest
{
public static void main(String[] args)
{
String sentence = "\u1D56B is the set of integers";
System.out.println(sentence);
for(int i = 0; i < sentence.length(); ++i)
{
int cp = sentence.codePointAt(i);
if(Character.isSupplementaryCodePoint(cp))
{
System.out.println("!!!");
++i;
}
System.out.println(cp);
}
}
}

这是Core Java 7th Edition 中关于Unicode字符的一段代码,为什么在1.5.0_10中编译运行的结果是

?B is the set of integers
7510
66
32
105
115
32
116
104
101
32
115
101
116
32
111
102
32
105
110
116
101
103
101
114
115

也就是并未将\u1D56B识别为一个Unicode字符,而是分成了两个\u1D56 和 B ?谢谢!
...全文
287 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
waiwai 2007-01-13
  • 打赏
  • 举报
回复
嗯,就是不知道怎么办了
边城狂人 2007-01-12
  • 打赏
  • 举报
回复
我去看了一下资料,原来搞错了一个问题。
char是16位的,不能保存超过16位的Unicode字符。

Character.isSupplementaryCodePoint(int)是静态方法,而且参数是int型,看样子也并不是为char提供的方法。

Java应该不知道你需要的那种Unicode字符,不知道该怎么处理了。
waiwai 2007-01-12
  • 打赏
  • 举报
回复
应该不行吧,0xXXXXX是十六进制整数,跟UTF-16的算法不一样的
边城狂人 2007-01-11
  • 打赏
  • 举报
回复
可能要用0xXXXXXXX来表达了。
直接将一个int转换成char
试试吧
waiwai 2007-01-11
  • 打赏
  • 举报
回复
0000-FFFF是basic multilingual plane,那么怎么才能使用10000以后的supplementary characters呢?如果不能用,Character.isSupplementaryCodePoint()方法不就没有用武之地了吗?谢谢!
边城狂人 2007-01-11
  • 打赏
  • 举报
回复
Java的Unicode只认两个字节,也就是4个16进制
所以\uXXXX,只能是4个X,第5个不会当成Unicode编码的一部分。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧