- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java字符集和编码
为什么要讲字符集?
Java采用Unicode编码,char型变量是16位的Unicode编码;
加深对java.io包里面的字节流/字符流的理解;
理解和解决Java编程中的乱码问题。
ASCII编码
是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准信息交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母,ASCII码有7位码和8位码两种形式。
1.7位ASCII码
第0~32号及第127号(共34个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BEL(振铃)等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;
第33~126号(共94个)是字符,其中第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。
2.8位ASCII码
但是,很多国家用的不是英文,他们的字母里有许多是ASCII里没有的,为了可以在计算机保存他们的文字,他们决定采用127号之后的空位来表示这些新的字母、符号,还加入了很多画表格时需要用下到的横线、竖线、交叉等形状,一直把序号编到了最后一个状态255。从128到255这一页的字符集被称扩展ASCII(8位ASCII码)。
双字节字符集(Double Byte Charecter Set, DBCS) GB2312-GBK
在DBCS系列标准里,最大的特点是两字节长的汉字字符和一字节长的英文字符并存于同一套编码方案里,因此他们写的程序为了支持中文处理,必须要注意字串里的每一个字节的值,如果这个值是大于127的,那么就认为一个双字节字符集里的字符出现了。
GB2312(Windows3.2和苹果OS)
全称是GB2312-80《信息交换用汉字编码字符集 基本集》,1980年发布,是中文信息处理的国家标准,可支持6000多个汉字,在大陆及海外使用简体中文的地区(如新加坡等)。Windows3.2和苹果OS就是 以GB2312为基本汉字编码, Windows 95/98则以GBK为基本汉字编码、但兼容支持GB2312。
GB2312规定:
一个小于127的字符的意义与ASCII码相同;
两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。
GBK(Windows2000、WindowsXP)
GBK是GB2312-80的扩展,是向上兼容的。它包含了20902个汉字,其编码范围:
高字节0~127表示一个与ASCII码兼容的字符;
高字节127表示是一个汉字的第一个字节,后面的低字节不再有必须大于127的限制了。
“一个汉字需要两个字节存储”
DBCS的缺点
各地的字符集不兼容(GBK、BIG5)
在读写文件时需要判断每个字节的值是否大于127,以便判断是否时一个汉字
Unicode
为了解决DBCS的上述缺点,国际标谁化组织指定了一种新的全球统一的编码方式——Unicode。
任何字符都使用2个字节18位来编码——216=65536;
低8位与ASCII码兼容;
除此之外,没有考虑与其他DBCS的兼容,他们之间的转换只能依靠查表实现;
UTF-8
UTF-8 : Unicode Transformation Format-8,主要用来在网络中快速传输Unicode字符。
基本原理:提供一个模板,将不同的Unicode字符映射成不同长度的编码:
在发送端,首先确定需要多少个8bits(octets)
并按照模板将Unicode字符重新编码,进行网络传输;
接受方按照相同的方法解码;
从上述编码原理中得出的结论是:
1.每个英文字母、数字所占的空间为1 Byte;
2.泛欧语系、斯拉夫语字母占2 Bytes;
3.汉字占3 Bytes。
0~127 ASCII
128~255 ASCII
双字节字符集
单字节字符集
GB 2312
GBK
BIG5
Unicode
UTF8
变字节字符集
文档评论(0)