首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java中char的编码模式与多语言区分

2012-10-31 
Java中char的编码方式与多语言区分????? 大早上突然想起去年遇到的一个问题【如何在服务器端判断一个字符是

Java中char的编码方式与多语言区分

????? 大早上突然想起去年遇到的一个问题【如何在服务器端判断一个字符是中文字符还是英文字符】,当时google的各种资料解决的问题,但是现在想来,当时的那个方法还是有各种Bug, 于是就爬起来整理一下自己对Java中char这种基本的数据类型编码方式(String的底层也是char[]实现)的理解

?

==============================Java中char的编码模式与多语言区分华丽丽的分界线Java中char的编码模式与多语言区分=============================

?

Java中使用了Unicode编码方式

public static boolean isChineseCharacter(char ch){return (ch>=0x4E00)&&(ch<0x9FBF) ? true : false;}

但是这种方式不能判断一些中文标点符号:

写道, : 0xff0c
。 : 0x3002
、 : 0x3001
【 : 0x3010
‘ : 0x2018 (小于0x3000的字符应该都是比较窄的)

?

?

但是如果你不想针对除了中文、英文字符之外的其他字符进行特殊处理的话、 你可以把后面的那些偏门字符都当做中文字符(大多数情况下都不会遇到的、起码的国内。。。), 比如把大于0x3000的字符都当做中文字符、小于0x3000的字符都当做英文字符(不知道是否有错误。。。)

?

?

备注: 我们经常会发现这种情况。中文字符用char表示是2byte(即16bits)。但是如果用String的getBytes方法返回的byte数组查看有时就会发现它的长度是3byte(utf-8)、 而英文字符是1byte(用char表示是2byte)。

API给此的解释是:String的getBytes方法使用平台的默认字符集将String编码为byte序列。那么上述的字节长度变化应该是String使用当前环境的编码方式进行了编码得到的byte字符串(现在应该一般都是utf-8吧?如果是gbk的话应该还是2byte),这种编码仅仅是平台相关的而不是底层的(String内部的char[]没有发生变化,Java中基本数据类型的固定长度是平台无关的)。

热点排行