字符-字节和编码---Characters--Bytes-And-Encoding.doc

字符-字节和编码---Characters--Bytes-And-Encoding.doc

ID:61834368

大小:116.50 KB

页数:9页

时间:2021-03-23

字符-字节和编码---Characters--Bytes-And-Encoding.doc_第1页
字符-字节和编码---Characters--Bytes-And-Encoding.doc_第2页
字符-字节和编码---Characters--Bytes-And-Encoding.doc_第3页
字符-字节和编码---Characters--Bytes-And-Encoding.doc_第4页
字符-字节和编码---Characters--Bytes-And-Encoding.doc_第5页
资源描述:

《字符-字节和编码---Characters--Bytes-And-Encoding.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、字符,字节和编码摘要:本文介绍了字符与编码的发展过程,相关概念的正确理解。举例说明了一些实际应用中,编码的实现方法。然后,本文讲述了通常对字符与编码的几种误解,由于这些误解而导致乱码产生的原因,以及消除乱码的办法。本文的内容涵盖了“中文问题”,“乱码问题”。掌握编码问题的关键是正确地理解相关概念,编码所涉及的技术其实是很简单的。因此,阅读本文时需要慢读多想,多思考。引言“字符与编码”是一个被经常讨论的话题。即使这样,时常出现的乱码仍然困扰着大家。虽然我们有很多的办法可以用来消除乱码,但我们并不一定理解这些办法的内在原理。而有的乱码产生的原因,实际上由于底层代码本

2、身有问题所导致的。因此,不仅是初学者会对字符编码感到模糊,有的底层开发人员同样对字符编码缺乏准确的理解。1.编码问题的由来,相关概念的理解1.1字符与编码的发展从计算机对多国语言的支持角度看,大致可以分为三个阶段: 系统内码说明系统阶段一ASCII计算机刚开始只支持英语,其它语言不能够在计算机上存储和显示。英文DOS阶段二ANSI编码(本地化)为使计算机支持更多语言,通常使用0x80~0xFF范围的2个字节来表示1个字符。比如:汉字'中'在中文操作系统中,使用[0xD6,0xD0]这两个字节存储。不同的国家和地区制定了不同的标准,由此产生了GB2312,BIG5

3、,JIS等各自的编码标准。这些使用2个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI编码。在简体中文系统下,ANSI编码代表GB2312编码,在日文操作系统下,ANSI编码代表JIS编码。不同ANSI编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI编码的文本中。中文DOS,中文Windows95/98,日文Windows95/98阶段三UNICODE(国际化)为了使国际间信息交流更加方便,国际组织制定了 UNICODE字符集,为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换、

4、处理的要求。WindowsNT/2000/XP,Linux,Java字符串在内存中的存放方法:在ASCII阶段,单字节字符串使用一个字节存放一个字符(SBCS)。比如,"Bob123"在内存中为:426F6231323300Bob123在使用ANSI编码支持多种语言阶段,每个字符使用一个字节或多个字节来表示(MBCS),因此,这种方式存放的字符也被称作多字节字符。比如,"中文123"在中文Windows95内存中为7个字节,每个汉字占2个字节,每个英文和数字字符占1个字节:D6D0CEC431323300中文123在UNICODE被采用之后,计算机存放字

5、符串时,改为存放每个字符在UNICODE字符集中的序号。目前计算机一般使用2个字节(16位)来存放一个序号(DBCS),因此,这种方式存放的字符也被称作宽字节字符。比如,字符串"中文123"在Windows2000下,内存中实际存放的是5个序号:2D4E87653100320033000000    ←在x86CPU中,低字节在前中文123 一共占10个字节。1.2字符,字节,字符串理解编码的关键,是要把字符的概念和字节的概念理解准确。这两个概念容易混淆,我们在此做一下区分: 概念描述举例字符人们使用的记号,抽象意义上的一个符号。'1','中','a','$

6、','¥',……字节计算机中存储数据的单元,一个8位的二进制数,是一个很具体的存储空间。0x01,0x45,0xFA,……ANSI字符串在内存中,如果“字符”是以 ANSI编码形式存在的,一个字符可能使用一个字节或多个字节来表示,那么我们称这种字符串为 ANSI字符串或者多字节字符串。"中文123"(占7字节)UNICODE字符串在内存中,如果“字符”是以在UNICODE中的序号存在的,那么我们称这种字符串为 UNICODE字符串或者宽字节字符串。L"中文123"(占10字节)由于不同ANSI编码所规定的标准是不相同的,因此,对于一个给定的多字节字符串,我们必须

7、知道它采用的是哪一种编码规则,才能够知道它包含了哪些“字符”。而对于 UNICODE字符串来说,不管在什么环境下,它所代表的“字符”内容总是不变的。1.3字符集与编码各个国家和地区所制定的不同ANSI编码标准中,都只规定了各自语言所需的“字符”。比如:汉字标准(GB2312)中没有规定韩国语字符怎样存储。这些ANSI编码标准所规定的内容包含两层含义:1.使用哪些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”。2.规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码”。各个国家和地区在制定编

8、码标准的时候,“字符的集

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。