目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准信息交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。ASCII码适用于所有拉丁文字,它用7位二进制数进行编码(其最高位(bit7)被用做奇偶校验位),可以表示128个字符。
第0~32号及第127号(共34个)是控制字符或通信专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BEL(振铃)等。
第33~126号(共94个)是字符,其中第48~57号为0~9 10个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。
ASCII码占用一个字节,准确地说,是7个比特。由于汉字出现在ASCII码之后,所以汉字的编码必须兼容ASCII码。还有一个问题就是,汉字的数目很多,用简单的1个字节根本无法表达(1个字节,撑死了只能表示256个字符,除掉ASCII码,只有128个可用的了)。因此聪明的中国人决定采用2个字节来表达一个汉字。由于ASCII码占用7位的历史原因,所以这种聪明的编码方式规定:对于连续的2个字节,只有在2个字节的bit7都是1的情况下,才认为这2个字节合起来表示一个汉字。这样不同长度混排的编码方法,通常被叫做"MBCS(Muilti-Bytes Charecter Set,多字节字符集)",如"中文ABC"这串文本,它所占用的字节数可能就是:2×2+3=7,如图4-12所示。
这样的编码挺好,而且与ASCII码兼容。这种编码被称做GB2312(国标2312,GB就是国标的简写)。GB2312后来又扩展成了GBK(国标扩展码),甚至GB18030。此外,不同的国家和地区都制定了不同的编码标准,如:BIG5、JIS等编码。不同编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字存储在同一段编码的文本中,UNICODE由此浮出水面。
为了使国际间信息交流更加方便,国际标准化组织(ISO)制定了 UNICODE 字符集,为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换、处理的要求。
UNICODE开始制订时,计算机的存储器容量极大地发展了,也就是说空间再也不成为问题了。于是ISO直接规定必须用2个字节,也就是16位来统一表示所有的字符,对于ASCII里的那些"半角"字符,UNICODE保持其原编码不变,只是将其长度由原来的8位扩展为16位,如英文字母"A",其编码就会变成"00000000 01100001"。很显然,由于"半角"英文符号只需要用到低8位,所以其高8位永远是0。因此这种大气的方案在保存纯英文文本时会浪费一倍的空间。而其他文化和语言的字符则全部重新统一编码。如:"中"的UNICODE为"01001110 00101101"。
这样一来,没那么多的麻烦事了,所有的字符都固定占用2个字节。如"中文ABC",它所占用的字节数就是:5×2=10,如图4-13所示。所以,使用UNICODE编码进行存放的字符也被称做宽字节字符。
参考:http://baike.baidu.com/link?url=Db8dadNPrUCL9gtccoba7kmWhPgt04W56hByfkM3rXtdwqoA8UtQVHKlfQ_vgrfF
分享到:
相关推荐
相比之下,Unicode是一种包含全世界几乎全部字符的编码标准,包括所有语言的字母、数字和符号。Unicode编码通常有UTF-8、UTF-16和UTF-32等几种形式。其中,UTF-8是最常用的一种,它具有良好的向后兼容性,能表示所有...
1. ANSI编码:通常指的是Windows系统的默认编码,如GBK或CP936,它是一种多字节编码,不支持所有Unicode字符。 2. Unicode:这是一个标准,定义了所有已知字符的唯一数字表示,分为Little Endian和Big Endian两种...
1数据转换:ANSI等编码、UTF8编码、UTF16编码(实际为Unicode编码)、TCHAR互转,可以先获取转换出的数据在存储时所需的大小 2字符串查找:正向查找、逆向查找、指定偏移查找 3字符串切割:正向分割、逆向分割、指定...
本文将深入探讨"ANSI2Unicode_1.0.3"这一源码,这是一个用于将ANSI编码转换为Unicode编码的工具,其主要功能是帮助用户处理不同编码格式间的兼容性问题。 首先,我们需要理解ANSI和Unicode的基本概念。ANSI编码,也...
在Windows系统中,Ansi编码通常是基于系统的默认代码页,如GBK或GB2312等,这些编码方式只适用于表示特定语言的字符集,对于多语言环境可能会出现乱码问题。 Unicode,全称统一码,是一种国际标准,旨在为世界上...
ANSI编码并非一个严格的规范,而是通常用来指代Windows系统中的默认多字节编码,如GBK或CP936等,这些编码依赖于地区设置,用于表示特定地区的字符集。在英语系统中,ANSI编码可能等同于ASCII编码,包含128个基本的...
各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解
1. **UTF8到ANSI**:这个过程通常需要知道目标ANSI编码页(例如GBK),因为不同的ANSI编码页对应不同的字符集。首先,你需要解析UTF8字符串,找出每个Unicode字符,然后查找对应的ANSI字符并将其写入新的字符串。 2...
本资源“Ansi与Unicode转换.rar”显然包含了关于这两种编码之间转换的易语言源代码,这对于学习和理解字符编码转换机制非常有帮助。 首先,让我们详细了解一下Ansi和Unicode: 1. Ansi编码:Ansi并不是一个特定的...
### UNICODE和GBK编码转换 #### 知识点概述 本文将详细介绍如何在Windows平台上实现UNICODE与GBK(简体中文编码)之间的转换。这涉及到字符集的基础知识、Windows API函数的使用以及具体的代码实现。 #### 字符...
ANSI和Unicode是两种常见的字符编码标准,它们在处理不同语言的文本时起着关键作用。本文将深入探讨ANSI和Unicode的区别,以及如何在C++中使用MFC库实现它们之间的转换。 首先,让我们了解ANSI和Unicode的基本概念...
utf-8、ANSI、Unicode相互转化c++实现 std::string ConverANSI2UTF8(const std::string & str); std::wstring ConverANSI2Unicode(const std::string str); std::wstring ConverUTF82Unicode(const std::string str)...
该函数接受一个ANSI编码的字符串作为输入,返回一个对应的宽字符(Unicode)字符串。其内部调用了`MultiByteToWideChar`函数,该函数可以将多字节字符编码转换为宽字符编码。 #### 2.2 Unicode到ANSI ```c char* ...
相比之下,UNICODE是一种国际化的字符编码标准,它使用固定宽度的16位(2字节)来表示每个字符,理论上可以表示65536个不同的字符,覆盖了全球大部分语言的字符集。UNICODE有两种主要的存储方式:UTF-16LE(低位在前...
ANSI编码是一种针对特定语言或地区的字符编码方式,如GB2312、GBK以及Big5等,它通常适用于Windows平台上的中文、日文和韩文系统,而Unicode是一种旨在容纳世界上所有字符的标准化编码系统。Unicode文件采用UTF-16...
2. **GBK到Unicode/UTF-8**:可以使用`QTextCodec::codecForName("GBK")`创建编码器,然后调用`fromUnicode()`或`toUnicode()`方法完成转换。 3. **Unicode/UTF-8到GBK**:与上述相反,使用`toLocal8Bit()`或`...
例如,一个使用GBK编码的文本文件在Windows上打开正常,但在Linux系统上可能因为默认使用UTF-8编码而显示乱码。为了解决这个问题,我们需要编写函数来完成编码之间的转换。 文件`strnormalize.c`和`public_...
ANSI编码通常指的是基于Windows的本地化代码页,如GBK或GB2312,它为每个字符分配一个特定的字节序列。而Unicode是一种广泛采用的标准,它使用双字节(UCS-2)或四字节(UTF-32)来表示世界上几乎所有的字符,因此...
Delphi 7是一款广泛使用的开发工具,但它的默认编码Ansi在处理多语言时存在局限性。例如,直接使用Ansi编码无法正确显示Unicode字符串,这导致了应用程序无法同时支持多种语言。因此,本方案重点介绍了如何在Delphi ...
在C++11标准中,Unicode编码转换是一个重要的更新,主要涉及了新的数据类型和字符串定义方式,以解决跨平台的Unicode字符处理问题。这里详细解释一下这些知识点: 1. **char16_t 和 char32_t 类型**: 在C++98之前...