MyException - 我的异常网
当前位置:我的异常网» Java Web开发 » 大家来讨论一下unicode和utf-8解决方案

大家来讨论一下unicode和utf-8解决方案(3)

www.MyException.Cn  网友分享于:2013-01-20  浏览:82次

http://tieba.baidu.com/f?kz=505769597
简单来说:
ASCII是7位(一个字节8位,剩下1位用以扩展)表示了128个字符。
而Unicode是用双字节(或更多——三个字节或四个字节)来编码(也叫宽字符吧),规定了其二进制编码格式,却未定义对应的字符存储实现方式。
UTF-8是得益于互联网的发展而强盛起来的。它是Unicode的实现方式之一(其他还有UTF-16、UTF-32)。“它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。”

ASCII和Unicode之间,还存在一个双字节字符集(DBCS:double-byte character set)——256代码的过渡,存在问题而导致了Unicode的发起与推广!!!

这是偶曾经一段读书笔记……
------解决方案--------------------
Unicode包含了世界上所有语言,是一种表示码,在使用的时候有着不同的实现形式,如UTF-8把其编码成不同的形式,至于为什么不直接编码,不太清楚,但Unicode 0x10FFFF的范围,应该用三个字节来表示才可以完整表示的。
第三个问题,应该采取的是默认编码吧。每个系统都有其默认的编码方式的。
------解决方案--------------------
unicode是一个字符集,utf-8是一种编码方式,也就是把unicode字符集变换成,1个或多个字节的一个换算关系。
一般要说unicode编码的话应该是那种最开始的那种编码方式,也是对unicode字符集进行编码的一种方式。
------解决方案--------------------
JAVA内部处理的统一为UNICODE
而C++则要明确指定ANSI(char)和UNICODE(wchar_t)

一个UNICODE编码为0x3D4F的字符,按照地址从左到右增大的顺序,在内存中存储映像为0x3D4F(大尾序,big endian),0x4F3D(小尾序,little endian).Intel的x86系列处理器只能处理小尾序(总线的线序),而摩托罗拉、IBM的处理器则为大尾序,ARM等嵌入式开发可自由设定字节顺序。操作系统方面,WINDOWS/LINUX为小尾序,苹果机MACINTOSH为大尾序。网络字节序也为大尾序。

UTF-8是UNICODE的一种常见实现方式。是一种变长的存储格式。UTF-16要区分LE/BE和带BOM方式。而我们一般用的WINDOW记事本默认为ANSI方式(EUC).




------解决方案--------------------
字符编码简介
ASCII码
从学计算机的那天开始,老师就告诉我们在计算机里面,所有的英文字母都对应到一个数字编码,这就是ASCII码(American Standard Code for Information Interchange)。ASCII码是很久很久以前(1968年)制定的。它只使用了一个8位字节中的低7位,总共是127个编码位。这样的方案很快就不够使用了。



单字节编码的发展
在80年代早期,一些现在流行的标准(如ISO 8859和Unicode)还未出现。那时为了支持多种地区的语言,各大组织机构或IT厂商开始发明它们自己的编码方案,以便弥补ASCII编码的不足。一时间,各种互不相容的字符编码方案成百花齐放之势。

为了避免混乱,ISO组织在1998年之后,陆续发表了一系列代号为8859的标准,作为ASCII编码的标准扩展,终于统一了单字节的西方字符的编码。ISO是设在瑞士的国际标准化组织的简称(International Organization for Standardization)。

ISO-8859-1(Latin1 - 西欧字符) 

ISO-8859-1覆盖了大多数西欧语言,包括:法国、西班牙、葡萄牙、意大利、荷兰、德国、丹麦、瑞典、挪威、芬兰、冰岛、爱尔兰、苏格兰、英格兰等,因而也涉及到了整个美洲大陆、澳大利亚和非洲很多国家的语言。

此外,ISO-8859-1后来被采纳为ISO-10646标准(后面会讲到)的首页,换句话说,Unicode的最开头256个字符编码和ISO-8859-1是一一对应的。正是由于这个特殊性,使很多人产生了对ISO-8859-1编码的误用。

 

 


ISO-8859标准还包括:

ISO-8859-2(Latin2 - 中、东欧字符) 
ISO-8859-3(Latin3 - 南欧字符) 
ISO-8859-4(Latin4 - 北欧字符) 
ISO-8859-5(Cyrillic - 斯拉夫语) 
ISO-8859-6(Arabic - 阿拉伯语) 
ISO-8859-7(Greek - 希腊语) 
ISO-8859-8(Hebrew - 希伯来语) 
ISO-8859-9(Latin5) 
ISO-8859-10(Latin6) 
ISO-8859-11(Thai - 泰国语) 
ISO-8859-12(保留) 
ISO-8859-13(Latin7) 
ISO-8859-14(Latin8) 
ISO-8859-15(Latin9) 
但是ISO 8859系列标准的字符编码,还是互不相容,不可能同时使用的。毕竟它们只是单字节的编码方案。而且,它们和多字节的编码方案如中文编码GB2312和BIG5也是不相容的。那些欧洲字符(最高位为1的字符),在GB2312和BIG5中被认为是双字节汉字编码的首字节。

多字节编码的发展
单字节编码只有256个码位(28=256),而中文字符何止千千万,单字节编码不可能满足中文编码的需要。于是为了适应东方文字信息处理的需要,ISO又制定了ISO 2022标准(Character code structure and extension techniques),提供了七位与八位编码字符集的扩充方法的标准。我国根据ISO 2022制定了国家标准GB2311 ——《信息交换用七位编码字符集的扩充方法》,并根据该标准制定了国家标准GB2312-80编码。其他东方国家和地区也制定了各自的字符编码标准,如日本的JIS0208,韩国的KSC5601,台湾地区的CNS11643等。

BIG5 

BIG5是从CNS11643的早期版本发展而来的,虽然没有包括CNS11643的全部内容,但却是目前台湾、香港地区普遍使用的一种繁体汉字的市场标准,包括440个符号,一级汉字5401个、二级汉字7652个,共计13060个汉字。

GB2312-80 

全称是《信息交换用汉字编码字符集 基本集》,1980年发布,是中文信息处理的国家标准,在大陆及海外使用简体中文的地区(如新加坡等)是强制使用的唯一中文编码。

· 双字节编码 

· A1-A9:符号区,包含682个符号 

· B0-F7:汉字区,包含6763个汉字 

GB2312码共收录6763个简体汉字、682个符号,其中汉字部分:一级字3755,以拼音排序,二级字3008,以偏旁排序。该标准的制定和应用为规范、推动中文信息化进程起了很大作用。

GBK 

汉字内码扩展规范(GBK)是国家技术监督局1995年为中文Windows 95所制定的新的汉字内码规范。

· 双字节编码,GB2312-80的扩充,在码位上和GB2312-80兼容。 

· 范围:8140 ~ FEFE(剔除xx7F)共23940个码位。 

· 包含21003个汉字,包含了ISO 10646中的全部中日韩汉字,简、繁体字融于一库。 

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有