日期:2014-05-20  浏览次数:20736 次

一个超基础的问题
看到一个贴子
是问怎么检测一个字符是不是汉字的。   看到回答中有这样的答案

\u4e00-\u9faf

。。     看着很晕     以前见过这样的东西     不过一直不知道是什么     我想学习一下   麻烦大家告诉我一下   \u4e00   \u9faf     这个是什么东西?   还有什么高一位什么的。

涉及到什么知识啊?   谢谢啦!

------解决方案--------------------
编码方面的 找本书看下或者百度下吧
------解决方案--------------------
字节编码了。
------解决方案--------------------
Unicode
^[\u4E00-\u9FA5]+$这是专门用于匹配简体中文的正则表达式, 实际上繁体字也在里面
------解决方案--------------------
呵呵,那个帖子已经结帖了

\u4e00 ~ \u9faf 是 Java 中表示 Unicode 字符的方法,这一 Unicode 编码范围是基本的汉字字符集。

Unicode 编码是由 Unicode 组织制定并将其标准化的,以示在使用统一的编码来表示世界上大多数的语言字符,最初制定时是由 4 位的 16 进制字符(两个字节),被称为 UCS-2 表示(当然,为了表示更多的字符还有 UCS-4 标准,即采用 4 个字节来表示),可以包含 2^16(65536)个字符,Unicode码一般采用 U+0000 的格式进行表示,在 U+0000~U+007F 完全与ASCII 的 128 字符编码相同。再往后的字符的由 Unicode 来划分每种字符集的范围。

至于高位为“1”是指:在使用 Unicode 的编码前,例如:原来在 DOS 系统下表示汉字的问题,DOS 中 ASCII 码由 1 个字节来表示,即 0x00~0x7F,而汉字则由两个字节来表示,为了不与 ASCII 字符相混淆,采用 0x80~0xFF 的范围来拼成两个字节(实际上最初的双字节汉字编码范围是 A0A1~FEFE 的,也就是我们常说的内码)。

ASCII 的字符范围若是使用二进制则为 00000000~01111111,可以看到最高位(最左边的一位)是“0”,而 80~FF 则为 10000000~11111111,最高位为“1”,因此在那个帖子中 Inhibitory 的方法就是以此来判断的。
------解决方案--------------------
呵呵,为了说明 Java 能很好的支持 Unicode,我原来发过一个很有趣的帖子,有兴趣的话可以去看看:

http://community.csdn.net/Expert/TopicView3.asp?id=5602854