JAVA中的汉字编码问题

来源:互联网 发布:淘宝运营面试问题 编辑:程序博客网 时间:2024/04/25 03:49

一、常见的字符编码
计算机中存储、处理和传送的数据是二进制的形式。各种文字、符号也必须用二进制数编码来表示,因此出现了一些不同形式的字符编码。
1.ASCII码
ASCII码是美国标准信息交换代码(American Standard Code for Information Interchange),是微机中最常采用的编码。ASCII有7位码和8位

码两种版本。国际通用的7位ASCII码是用7位二进制数表示一个字符编码,其编码范围从现在起000000B~1111111B,其有27?=128个不同的编码

值,相应可以表示128个不同字符的编码。
扩展的ASCII码使用8位二进制表示一个字符的编码,可表示28=256个不同字符的编码???。
2.ISO8859-1码
ISO8859-1码属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列。由于是单字节编码,和计算机内表示单位一致,所以很多时

候仍旧使用iso8859-1编码来表示。
3.GB2312编码
GB2312编码是中华人民共和国国家标准汉字信息交换用的编码,是由国家标准总局发布的关于简化汉字的编码,通行于中国大陆地区及新加坡

,简称国标码。两个字节中,第一个字节(高字节)的值为区号值加32(20H),第二个字符(低字节)的值为位号值32(20H),用这两个值

来表示一个汉字的编码。该字符集是一般中文操作系统默认的字符集。
4.GBK编码
GBK编码是GB2312的扩展,是向上兼容的。它的编码范围是0x8140至0xfefe,其所有字符都可以一一映射至Unicode2.0,实际上Java提供了对

GBK字符集的支持。
5.Unicode编码
Unicode编码是微软提出的解决多国字符问题的多字节等长16位编码,它对英文字符采取前面加“0”字节的策略实现等长兼容。如“A”字符的

ASCII码为0x41,Unicode码为0x00,0x41。所以如果将高位字节去除,可以近似地将Unicode转换为ISO8859-1,它是Java内码的编码方式。

6.UTF-8编码

UTF-8是UNICODE的一种变长字符编码,由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。如果UNICODE字符由2个字节表示,则编码成UTF-8很可能需要3个字节,而如果UNICODE字符由4个字节表示,则编码成UTF-8可能需要6个字节。用4个或6个字节去编码一个UNICODE字符可能太多了,但很少会遇到那样的UNICODE字符。