`
gatusso52
  • 浏览: 109651 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于编码 之一 ANSI GBK UNICODE的由来

    博客分类:
  • java
阅读更多

转自白乔的博客:)

 

目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(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所示。

 
图4-12  MBCS下中文与字
母的存储长度

这样的编码挺好,而且与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编码进行存放的字符也被称做宽字节字符。

 
图4-13  UNICODE下中文与字母的存储长度
在标准C++中,可以这样定义一个MBCS或者ANSI的字符串,即:
 
  1. char  msg[] =  "学习C++"

定义一个UNICODE的字符串,可以用L前缀,即:

  1. wchar_t  msg[] = L "学习C++"

UNICODE统一了天下,但是客观事实是,所有的应用程序(包括航空公司的订单系统)不会一夜之间换用UNICODE编码,所以程序员面对的新问题是:如何编写自适应编码的程序?如何完成各种编码之间的转换?

===============================

分享到:
评论

相关推荐

    C++ gbk转unicode、ansi转unicode,字符串查找、切割、转十六进制、转二进制、转义,随机数等数据处理类源码

    1数据转换:ANSI等编码、UTF8编码、UTF16编码(实际为Unicode编码)、TCHAR互转,可以先获取转换出的数据在存储时所需的大小 2字符串查找:正向查找、逆向查找、指定偏移查找 3字符串切割:正向分割、逆向分割、指定...

    各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解

    各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解

    utf-8、ANSI、Unicode相互转化c++实现

    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文本转换工具

    HTML->TXT转换、文件合并、TXT文件段落合并、TXT文件分行、编码(GB/GBK/Big5/Shift-JIS/Unicode)转换(只能用于Win 2k/XP)、文本替换、HTML代码整理、文件切分、文本提取、正则表达式、TCR批量压缩/解压.

    UNICODE和GBK编码转换

    使用windows进行unicode编码和GBK编码之间的转换的示例程序

    编码批量转换工具

    批量字符编码转换工具可以在gbk,gb23123,unicode,utf8,ansi之间进行汉字编码转换。 【软件特点】 1 支持格式众多的字符串编码转换器 支持几十种字符编码转换。比如utf8转gbk,gb2312转utf8,ansi转utf8,utf8 unicode...

    Qt中的字符编码转换:UTF8、Unicode、GBK、ASCII、16进制字符、16进制数值

    Qt字符转换,串口接收数据转为中文显示可用。Qt中的字符编码转换:UTF8、Unicode、GBK、ASCII、16进制字符、16进制数值

    浅谈文字编码和Unicode

    浅谈文字编码和Unicode, 详细讲解了汉字在计算机中是如何编码和存储的,让你明白为什么我们打开文档时有时会出现乱码!

    批量字符编码转换工具 20070709

    批量字符编码转换工具可以在gbk,gb23123,unicode,utf8,ansi之间进行汉字编码转换。 批量字符编码转换工具的特色: 1 支持格式众多的字符串编码转换器 支持几十种字符编码转换。比如utf8转gbk,gb2312转utf8,ansi转...

    各种字符编码方式详解及由来

    一直对字符的各种编码方式懵懵懂懂,什么ANSI UNICODE UTF-8 GB2312 GBK DBCS UCS……是不是看的很晕,假如您细细的阅读本文你一定可以清晰的理解他们

    编码转换类1.2版模块源码

    GBK编码:1-2个字节,包含GB2312、ASCII、BIG5,注意:同一个繁体字在GBK和BIG5中的编码是各不相同的。GB18030编码:1字节、2字节、4字节,兼容GBK。UNICODE是国际统一编码,UCS-2标准:2字节,UCS-4标准:4字节。...

    文本文件编码探查.zip

    2)ANSI(GBK)',这是兼容西文字母的中文格式 3)UTF-8',这是不带BOM前导标志的UTF8编码 4)UTF-16LE',这是文件中带有UTF-16LE前导标志的标准的UNIcode编码(小端) 5)UTF-16BE',这是文件中带有UTF-16BE前导标志...

    utf8 helper

    支持编码:ansi text, gbk, unicode 程序在运行中,若发现已是UTF8,则智能的跳过不处理,并继续处理其它…… utf8helper_shell.bat:这是一个为懒人准备的一c/c++程序员windows shell。需要源代码的可给我留言。

    中文内码转换巨匠普通版v3.5官方安装版

    可批量处理Ansi、Unicode、UTF8、bigendian、简体HZ等编码文件。4.0版新增自定义转换设置,可修正一个简体字对应多个繁体字、大陆与台湾词汇的差异。 主要特点: 1、支持GBK简繁 ->BIG5、BIG5->GBK简繁、GBK简->GBK...

    超详细的字符编码教程

    2.6.4. ANSI编码与ANSI的关系 2.6.5. ANSI字符编码和Windows 1252 2.6.5.1. Windows 1252和ISO 8859-1之间的区别 2.6.6. 为何"ANSI编码"(在Windows中)被称为"本地编码" 2.7. BOM 2.7.1. BOM是什么 2.7.2. 为何需要...

    站长必备工具之文本替换专家(支持网页编码gbk和UF8).rar

    网页文件替换 支持所有网页模块 源码 快速替换 1分钟可以替换1000多个页面智能准确的区分ANSI、UTF-8(包括无BOM的UTF-8)、Unicode、UTF-32等多种文件编码。 站长必备工具之文本替换专家功能介绍 文本替换专家,...

    全能字符编码转换工具

    最全,功能最强的编码转换工具,可以在gbk,gb23123,unicode,utf8,ucs,ansi....等等各种编码之间互换,是编码转换的最佳利器

    超级批量文本替换 5.02 绿色版_支持ANSI字符文本类型实现批量

    支持所有纯ANSI文件,支持GBK/Unicode/UTF8编码的htm、html、asp、java、php等文件 可自定义所支持的文件类型 支持16进制替换 支持单行和多行以及段落替换 支持特征替换和提取 支持正则替换 支持多规则同时替换并...

    易语言-编码转换类1.2版模块

    本模块支持GBK、UNICODE、UTF-8三种编码之间的互相转换,不依赖系统Api,通过查表和编码算法直接得出转码结果,支持多线程调用。 编码小科普 GBK编码:1-2个字节,包含GB2312、ASCII、BIG5,注意:同一个繁体字在GBK...

    文本编码批量转换(需.net 2.0)

    将一个目录的所有指定后缀的文本文件批量转换到指定目录下。 支持ANSI(含GBK,GB2312,ASCII),Unicode,Unicode big endian,UTF-8编码互转,自动判断源文本文件的编码方式。

Global site tag (gtag.js) - Google Analytics