为什么计算机不统一unicode中文编码范围编码!还各国乱七八糟的编码

编码转换器
编码被广泛应用于计算机中,编码的种类非常多,不同的字体类型采用的编码也不一样,有时候为了使用方便,需要对编码进行转换。手动转换的话不仅费时而且容易出错,为此东坡下载给大家整理了多个编码转换器,如果你需要对编码进行转换的话,可以用这些工具来转换,非常方便!
v1.3 绿色免费版
在这给大家介绍一款文件编码转换批量转换程序,支持将GB/BIG5/UT-8编码的文件进行相互转换,操作简单方便,转换速度非常快,并且绿色免费,界面又很简洁,绝对实用!
功能说明:将GB/BIG5/UT-8编码的文件相互转换,..
V1.5 绿色单文件版
中文\740KB
星语编码进制转换工具是一个全能的文件编码和进制转换软件,支持各种文件编码之间的转换,支持多种进制转换,此外,还支持下载地址转换。
支持的转换类型全能进制转换、编码转换、MD5破解、 支持迅雷、快车、旋风专..
1.5 中文绿色版
中文\738KB
可以对字符编码和进行进行转换,以及互转。
星语编码进制转换,全能进制转换、编码转换、md5破解、 支持迅雷、快车、旋风专用链接转换。支持ansi转ansi转usc2;ansi转utf16ansi转utf8;base64编码;encode编..
(UniCue) 1.2 绿色中文版
不知道有没有朋友是需要对一些页面或者是字符之类的需要进行一系列编码转换的,有的话就不妨来试试小编给你推荐的这款UniCue,它是一款比较专业的编码转换工具集,有需要的就赶紧下载试试看!
软件介绍UniCue是一系..
1.0 中文绿色版
元宝文件编码转换工具,收藏必选。1、可以支持常见编码格式如UTF-8、UTF-7、Unicod、ASCII、GB2312、Big5之间的转换。2、支持选取文件夹批量、文件多选、翦贴板中复制三种文件批量选取方式,能实现指量转换帮助说明:..
gbuni是演示如何在UTF-8、UCS-2、GBK编码之间转换的示例程序。它演示了两种转换方法:使用Win32 API和不使用Win32 API,后者是平台独立的。关于UTF-8、UCS-2、GBK编码的背景知识可以查看我的文章 中的谈谈Unicode编码..
1.0 中文绿色版
中文\415KB
这是一个将一个文本,或是一个目录的文本进行转换的工具。批量转换Ansi,Unicode,Unicode big endian,UTF-8工具使用方法简单:1、含文本的文件和文件夹拖入程序,即可获得列表,以及编码格式;2、可按4种格式读取和存..
v2.60.60218 绿色版
NJStar通用编码转换器是一款绿色实用的编码码转换工具,操作界面简洁,使用很简单,容易上手,经常玩电脑的朋友都会用的。..
v1.5 绿色免费版
中文\744KB
星语全能编码进制转换工具是一款万能编码进制转换工具,支持全能进制转换和编码转换,软件绿色小巧,使用方便快捷,而且完全免费。
功能说明:全能进制转换、编码转换、MD5破解、 支持迅雷、快车、旋风专用链接转换..
1.3 绿色版
水淼文件编码转换器是一款批量文件编码互转(ANSI、UTF-8、Unicode、Unicode big endian)、繁简体互转(GBK繁简体、Big5繁简体)的免费工具。有时候做一些工程的时候,由于很多文件编码不统一,发布的时候就会显得很..
最近用VS2005做项目,遇到一个工程中有很多文件的编码不统一,有的是UTF-8,有的是GB32的,发布网站时就乱七八糟的。可以通过VS环境中的“高级保存选项”一个一个地改过来,因实在太多,好几十个,重复工作是非常令人..
1.0 单文件中文版
这是一款支持数十种代码转换的小工具,包括各种语言。
Java 里面可以使用多种编码方式,比如UTF-8 GBK ISO8859-4等等,可以到百科里面看看这些编码的区别,现在比较流行的是使用 UTF-8 应为其覆盖了大多数的语言,可..
V1.00 绿色版
中文\709KB
这一款软件是关于编码转换的说,那么有喜欢的话就来东坡网下载使用吧!
软件介绍Makin数据王是由一个网友编写的一款编码和进制转换工具,可以在2-36之间任意转换。编码转换同样支持多种类型,并且还带有英汉互译功能..
中文\197KB
这是一款将中文汉字转换成unicode码的工具,也可以将unicode码转为汉字。
Unicode 是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的..
1.5.8.1 绿色免费版
中文\837KB
这是一个文件编码转换工具,支持批量转换。可以将文件编码在GBK和UTF-8之间相互转换。
该软件使用非常简单,鼠标左键按住需要转码的的文件或者文件夹直接拖到工具窗口内即可,更加方便快捷。
更新内容:- 增加文件..
0.4 中文最终版
中文\129KB
这是一个支持所有的编码互转的工具,并且可以对编码进行自动的截取。
并且支持对转换后的编码进行格式化哦。
字符型数据强制转换成合适的数值型数据,就可以得到相应的 ASCII 码;反之,如果将一个合适的数值型数据..
V1.0 最新免费版
中文\278KB
如何查询 Unicode 编码呢?
在 Windows 系统下,大家可以在运行栏输入 &eudcedit.exe& 调用 TrueType 造字程序,在其中的窗口--参照页,在&代码&栏输入 Unicode 编码可以查找到相应的字符;在&..
v2.11绿色版
中文\700KB
给大家介绍一个文本批量转换编码工具,方便大家对大量文本文件进行转换编码,简单快捷的使用方式,需要的朋友快来下载体验吧!
软件介绍剑儿txt文本批量转换编码工具,用于批量转换txt文本文档的编码格式。如果有大..
v1.0 中文绿色版
还在为手机上的乱码发愁吗,小编今天给大家带来一款可以转换乱码的工具。喜欢你们能喜欢。
TXT文本批量转换编码工具用于批量转换txt文本文档的编码格式。如果有大量的文件,一个一个打开另存为Unicode,utf8,ANSI。..
1.0 绿色版
中文\920KB
文字编码转换支持转换成Ansi、Unicode、UniBigEnd、UTF-8、UTF-7,输入文字后就会立刻显示出转换的结果,然后点击“开始转换文字编码”,生成的文件在系统桌面。
2.00 中文绿色版
这是一款将UNICODE编码的字符转换成各种编码的工具,转换数据可以实时查看,速度非常快,下面来介绍一下什么是UNICODE编码,Unicode给每个字符提供了一个唯一的数字,不论是什么平台,不论是什么程序,不论什么语言。..
1.85 ANSI中文绿色版
这是一个标准的字符编码转换工具,可以将任意字符实时的转换成我们常见的各种编码,包括ansi编码等。2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,..
1.0.0.0 绿色免费版
  这是一个多功能的数据编码转换工具,支持多种数制直接的转换,包括自然二进制码转换成二进制格雷码、二进制格雷码转换为自然二进制码、二进制转十进制、十进制转二进制、十进制码转换成二进制格雷码,有需要的可..
2.1 中文安装版
中文\691KB
这是一款将txt文件的编码进行转换,并且可以对txt文件进行批量替换的工具,通过萍客txt文本助手,你可以快速的完成多个txt文件编码的转换,而且萍客txt文本助手可以转换的编码不只是unicode,还有utf-8等常用编码格式..
1.0 绿色单文件版
中文\233KB
  URLencode是一个文本或者网址URL编辑转换器,可将网址中明文的汉字转化为字符串编码,大家是不是在百度知道或者别的地方经常看到和这个类似的代码“%77%77%77%2E%62%6B%69%6C%6C%2E%63%6F%6D”,这就是通过URLen..
3.0 中文绿色版
中文\345KB
字符编码转换之星,是一个多功能的字符转换器,支持将字符转换成GBK,BIG5,UTF-8,UNICODE
本软件可以用在破解别人软件的时候的将软件界面的汉字更换。
或是一些其它特别情况
1.90 绿色版
中文\759KB
这是一款多功能进制,编码转换器
主要有以下功能:
1、字节集到文本
2、进制转换(任意进制的互转)
3、URL网址编码UTF8转换
4、BASE64编码转换
5、UNICODE编码
6、MD5转换,包括16位和32位的
1.0 绿色单文件版
  小葵多功能转换工具,转换多种数据,目前最好的编码转换工具。支持将普通编码转换为URL/SQL_En/Hex/Asc/MD5_32/MD5_16/Base64等格式的编码,还支持解密base64编码。
1.3 绿色中文版
  &文本网页编码批量转换工具能够实现网页文件、文本文件编码批量转换,可以批量将文本类文件批量转换为UTF-8/ansi(gb2312) /unicode(UTF16)等编码,同时还能转换网页文件中的编码标签。
1.0绿色免费版
中文\367KB
进制编码转换器(二进制与三十六进制)
1、支持十六进制和文本转换;
2、十六进制和二进制转换;
3、支持Base64编码/解码;
4、二到三十六任意进制互相转换;
亲,本软件被360报毒,请自行斟酌,如需..
V1.0 简体中文绿色免费版
2.0.0.0 官方最新版
中文\57.9M
科力达数据传输是一款利达旗下的一款水准仪产品。可以用这款软件将水准仪中的数据传输到pc机。有需要的可以来东坡下载使用!..
1.0 绿色最新版
易语言文本编码转换器是目前用起来非常方便的一款多功能编码转换器。可以让你们通过它来GB18030\GBK\GB2312\UTF-8转换成D4、MD5、Sha1、Base64等所需要的编码。喜欢都可以进行下载!..
1.0 免费版
中文\706KB
薇博传媒url短网址批量转换系统支持:新浪短网址 百度短网址 is短网址,一键批量转换多个连接,可以帮助你快速的转换网址,有需要的赶紧来下载使用吧。..
中文\233KB
小编这里给大家带来一款非常全能、给力的Html代码转换器,它可以轻松将你的html代码转换成js、jsp、php等格式,方便你更好的利用这些代码。需要的朋友下载试试吧!..网页为什么会乱码?
因为编码不对!什么是编码?编码不对为什么会乱码?……??编码转换为什么会丢失数据?……??不管是数据库还是网页,都可能碰到过乱码问题在计算机世界里,所有数据都使用二进制存储,即只有1和0,在人的世界里有中文/英文/阿拉伯文等,还有图片/视频/音频,如何使用二进制存储和显示它们呢?具体使用哪些二进制字符表示哪个符号的这样一种规则就叫编码。编码充当着一个翻译的角色,计算机是美国人发明的,为了存储他们使用的语言abcd等26个英文字母以及常用的符号~!@#?%……&*-+,美国有关标准化组织出台了ASCII编码,但是,ASCII编码是单字节编码系统,最多只能表示256个字符,因此ASCII只适用于拉丁文字子母,而其他国家有各种各样的语言文字,比如中文字符有好几万个,于是有了GB2312双子节编码。GB2312适用于汉字处理、汉字通信等系统之间的信息交换,GB2312共收录6763个常用中文和非汉字图形字符682个,由中国国家标准总局于1980年发布,随着汉字标准的发展,GB2312收录的6千多字明显不够用了,1995年又发布了GBK编码,GBK是GB2312点扩展,向下兼容GB2312编码,GBK编码共收录了21003个汉字。观察ASCII会发现,ASCII编码只能表示寥寥256个字符,而GB2312共收录6千多个字符,假如想用ASCII来表示六千多个中文,很明显ASCII里面并没有与中文对应的映射关系,所以就显示乱码了。每个国家都有自己相应的编码规则,为了解决编码不统一的问题,Unicode编码方案应运而生。Unicode是计算机科学领域里的一项业界标准,包括字符集、编码方案等,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求,于1994年正式公布。UTF8就是Unicode编码方案的一种。UTF8的长度是1-6位,GB2312长度是2位,一个长度为3位的UTF8字符转换成GB2312就会丢失信息,显示乱码,再转换回UTF8也无济于事,因为信息已经丢失。这就是我们有时候在转换编码的时候乱码的原因。
Ctrl+D&将本页面保存为书签,全面了解最新资讯,方便快捷。字符编码问题(Unicode的编码规则)
先看个win7记事本的另存为界面的部分截图,编码可有四种选择:
字符与编码的发展
计算机刚开始只支持英语,其它语言不能够在计算机上存储和显示。ASCII码一共规定了128个字符的编码,这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。
ANSI编码(本地化)
为使计算机支持更多语言,通常使用0x80~0xFF范围的2个字节来表示1个字符。比如:汉字'中'在中文操作系统中,使用[0xD6,0xD0]这两个字节存储。不同的国家和地区制定了不同的标准,由此产生了GB2312,BIG5,JIS等各自的编码标准。这些使用2个字节来代表一个字符的各种文字延伸编码方式,称为ANSI编码。在简体中文系统下,ANSI编码代表GB2312编码,在日文操作系统下,ANSI编码代表JIS编码。不同ANSI编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段ANSI编码的文本中。
UNICODE(国际化)
为了使国际间信息交流更加方便,国际组织制定了UNICODE字符集,为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字“严”。需要注意的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。
Unicode的实现--UTF-8
互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。
UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n&1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
编码规则如下表,字母x表示可用编码的位。
二进制表示
有效二进制位数目
可表示的最大编码
编码范围(16进制)
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
1f ffff之间的编码暂时不用。
下面,还是以汉字“查”为例,演示如何实现UTF-8编码。
查的Unicode是U+67E5(10 0101),根据上表,可以发现0x67E5处于第三行的范围内,因此“查”的utf-8编码需要3个字节,即格式是“1110xxxx
10xxxxxx 10xxxxxx”。从“查”的Unicode最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。就得到了“查”的utf-8编码:
00101,转换为16进制0xE69FA5。
windows记事本程序可选的编码方式
有:ANSI,Unicode,Unicode
big endian和UTF-8。
1)ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows简体中文版,如果是繁体中文版会采用Big5码)。
2)Unicode编码指的是UCS-2编码方式,即直接用两个字节存入字符的Unicode码(对于大于2个字节的字符无法存储。UTF-16扩充了Unicode,包括了一些稀有字符,想我们国家的满文,藏文等等,两者基本上等价)。这个选项用的little
endian格式。
3)Unicode
big endian编码与上一个选项相对应。
4)UTF-8编码,也就是上面谈到的编码方法。
endian和Big
Unicode码可以采用UCS-2格式直接存储。以汉字”严“为例,Unicode码是4E25,需要用两个字节存储,一个字节是4E,另一个字节是25。存储的时候,4E在前,25在后,就是Big
endian方式;25在前,4E在后,就是Little
endian方式。
自动检测编码方式--BOM
Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做“零宽度非换行空格”(ZERO
WIDTH NO-BREAK SPACE),用FE FF表示。这正好是两个字节,而且FF比FE大1。如果一个文本文件的头两个字节是FE
FF,就表示该文件采用大头方式;如果头两个字节是FF
FE,就表示该文件采用小头方式。
在windows中Unicode编码中表示字节排列顺序的这个个文件头,也叫做BOM(byte-order
mark),FFFE和FEFF就是不同的BOM。
1)Unicode:FF FE 表明是小头方式存储。
2)Unicode
big endian:FE
FF 表明是大头方式存储。
3)UTF-8:EF BB BF 表示这是UTF-8编码。
软件对文本编码的判断
当一个软件打开一个文本时,它要做的第一件事是决定这个文本究竟是使用哪种字符集的哪种编码保存的。软件有三种途径来决定文本的字符集和编码:
最标准的途径是检测文本最开头的几个字节,如下表:
Charset/encoding
UTF-16/UCS-2,
little endian
UTF-16/UCS-2,
big endian
UTF-32/UCS-4,
little endian.
UTF-32/UCS-4,
big-endian.
但是某些文本没有这些位于开头的字符集标记,比如centos下的gedit保存文本时就不会添加这些标记。因此,软件不能依赖于这种途径。这时,软件可以采取一种比较安全的方式来决定字符集及其编码,那就是弹出一个对话框来请示用户,例如用MicrosoftWord打开这种文本,Word就会弹出一个对话框让你选择编码。
如果软件不想麻烦用户,或者它不方便向用户请示,那它只能采取自己“猜”的方法,软件可以根据整个文本的特征来猜测它可能属于哪个charset,这就很可能不准了。Windows下的记事本和Linux下的文本编辑器都是这样做的,但是用它们打开或另存为的时候可以选择编码方式。
字符编码总结
记事本编码格式浅析
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。在计算机中为何不直接使用UTF8编码进行存储,而要使用Unicode再转换成UTF8? - 知乎502被浏览40996分享邀请回答42055 条评论分享收藏感谢收起unicode.org/history/unicode88.pdfA Brief History of Character Codes in North America, Europe, and East Asia, Steven J. Searle, Unicode Revisited, Steven J. Searle, Wikipedia, 中日韩统一表意文字, 中日韩统一表意文字知乎问题, Unicode和UTF-8有何区别 , 于洋的回答, 7821 条评论分享收藏感谢收起查看更多回答学点编码知识又不会死:Unicode的流言终结者和编码大揭秘 -
| 关注黑客与极客
学点编码知识又不会死:Unicode的流言终结者和编码大揭秘
共537043人围观
,发现 22 个不明物体
如果你是一个生活在2003年的程序员,却不了解字符、字符集、编码和Unicode这些基础知识。那你可要小心了,要是被我抓到你,我会让你在潜水艇里剥六个月洋葱来惩罚你。
这个邪恶的恐吓是Joel Spolsky在十年前首次发出的。不幸的是,很多人认为他只是在开玩笑,因此,现在仍有许多人不能完全理解Unicode,以及Unicode, UTF-8, UTF-16之间的区别。这就是我写这篇文章的原因。
言归正传,设想在一个晴朗的下午,你收到一封电子邮件,它来自一个你高中之后就失去联系的朋友,并带有一个txt格式(也称为纯文本格式)的附件。这个附件包含下面这样一串二进制bits:
Email的正文是空的,这使它更加神秘。在你启动常用的文本编辑器打开这个附件之前,你有没有想过,文本编辑器是怎么将二进制形式翻译成字符的?这其中有两个关键问题:
1,字节是怎样分组的?(例如1个字节的字符和2个字节的字符)
2,一个或多个字节是怎么映射到字符上的?
这些问题的答案就在这篇文档()中,大致说来,编码定义了两件事:
1,字节是怎么分组的,如8 bits或16 bits一组,这也被称作编码单元。
2,编码单元和字符之间的映射关系。例如,在ASCII码中,十进制65映射到字母A上
字符编码和字符集之间有微小的区别。不过通常它和你无关,除非你在设计一个底层的库。
ASCII码是上个世纪最流行的编码体系之一,至少在西方是这样。下图显示了ASCII码中编码单元是怎么映射到字符上的。
有一个即使在经验丰富的程序员中也非常常见的误解就是,纯文本使用ASCII码并且每个字符都是8 bits。
事实是,没有这样的「纯文本」。如果在内存或者硬盘中有一个你不知道编码的字符串,那你就无法翻译或者显示它。这绝对没有第二条路可选。
那么当你刚刚收到的附件没有指定编码格式的时候,计算机会如何翻译它呢?这是否意味着你就永远也读不到失去联系的老朋友想跟你说的话了呢?在我们找到答案之前,我们首先回到那个年代—那个用钱能买到的最大硬盘是29MB的时代。
一,历史回顾
很久以前,计算机制造商有自己的表示字符的方式。他们并不需要担心如何和其它计算机交流,并提出了各自的方式来将字形渲染到屏幕上。随着计算机越来越流行,厂商之间的竞争更加激烈,在不同的计算机体系间转换数据变得十分蛋疼,人们厌烦了这种自定义造成的混乱。
最终,计算机制造商一起制定了一个标准的方法来描述字符。他们定义使用一个字节的低7位来表示字符,并且制作了如上图所示的对照表来映射七个比特的值到一个字符上。例如,字母A是65,c是99,~是126等等, ASCII码就这样诞生了。原始的ASCII标准定义了从0到127 的字符,这样正好能用七个比特表示。不过好景不长。。。
为什么选择了7个比特而不是8个来表示一个字符呢?我并不关心。但是一个字节是8个比特,这意味着1个比特并没有被使用,也就是从128到255的编码并没有被制定ASCII标准的人所规定,这些美国人对世界的其它地方一无所知甚至完全不关心。
其它国家的人趁这个机会开始使用128到255范围内的编码来表达自己语言中的字符。例如,144在阿拉伯人的ASCII码中是?,而在俄罗斯的ASCII码中是?。即使在美国,对于未使用区域也有各种各样的利用。IBM PC就出现了“OEM 字体”或”扩展ASCII码”,为用户提供漂亮的图形文字来绘制文本框并支持一些欧洲字符,例如英镑(?)符号。
用IBM扩展字符集绘制的很酷的DOS启动画面
再强调一遍,ASCII码的问题在于尽管所有人都在0-127号字符的使用上达成了一致,但对于128-255号字符却有很多很多不同的解释。你必须告诉计算机使用哪种风格的ASCII码才能正确显示128-255号的字符。
这对于北美人和不列颠群岛的人来说不算什么问题,因为无论使用哪种风格的ASCII码,拉丁字母的显示都是一样的。英国人还需要面对的问题是原始的ASCII码中不包含英镑符号,但是这个已经无关紧要了。
与此同时,在亚洲有更让人头疼的问题。亚洲语言有更多的字符和字形需要被存储,一个字节已经不够用了。所以他们开始使用两个字节来存储字符,这被称作DBCS(双字节编码方案)。在DBCS中,字符串操作变得很蛋疼,你应该怎么做str++或str–?
这些问题成为了系统开发者的噩梦。例如,MS DOS必须支持所有风格的ASCII码,因为他们想把软件卖到其他国家去。他们提出了「内码表」这一概念。例如,你需要告诉DOS(通过使用”chcp”命令)你想使用保加利亚语的内码表,它才能显示保加利亚字母。内码表的更换会应用到整个系统。这对使用多种语言工作的人来说是一个问题,因为他们必须频繁的在几个内码表之间来回切换。
尽管内码表是一个好主意,但是它不是一个简洁的解决方案,它只是一个hack技术或者说是简单的修正来让编码系统可以工作。
二,进入Unicode的世界
最终,美国人意识到他们应该提出一种标准方案来展示世界上所有语言中的所有字符,以便缓解程序员的痛苦和避免字符编码引发的第三次世界大战。出于这个目的,Unicode诞生了。
Unicode背后的想法非常简单,然而却被普遍的误解了。Unicode就像一个电话本,标记着字符和数字之间的映射关系。Joel称之为「神奇数字」,因为它们可能是随机指定的,而且不会给出任何解释。官方术语是码位(Code Point),总是用U+开头。理论上每种语言中的每种字符都被Unicode协会指定了一个神奇数字。例如希伯来文中的第一个字母?,是U+2135,字母A是U+0061。
Unicode并不涉及字符是怎么在字节中表示的,它仅仅指定了字符对应的数字,仅此而已。
关于Unicode的其它误解包括:Unicode支持的字符上限是65536个,Unicode字符必须占两个字节。告诉你这些的人应该去换换脑子了。
记住,Unicode只是一个用来映射字符和数字的标准。它对支持字符的数量没有限制,也不要求字符必须占两个、三个或者其它任意数量的字节。
Unicode字符是怎样被编码成内存中的字节这是另外的话题,它是被UTF(Unicode Transformation Formats)定义的。
Unicode编码
两个最流行的Unicode编码方案是UTF-8和UTF-16。让我们看看它们的细节
UTF-8是一个非常惊艳的概念,它漂亮的实现了对ASCII码的向后兼容,以保证Unicode可以被大众接受。发明它的人至少应该得个诺贝尔和平奖。
在UTF-8中,0-127号的字符用1个字节来表示,使用和US-ASCII相同的编码。这意味着1980年代写的文档用UTF-8打开一点问题都没有。只有128号及以上的字符才用2个,3个或者4个字节来表示。因此,UTF-8被称作可变长度编码。
回到文章开始的问题,来自你老朋友的附件的字节流如下:
这个字节流在ASCII和UTF-8中表示相同的字符:HELLO
另一个流行的可变长度编码方案是UTF-16,它使用2个或者4个字节来存储字符。然而,人们逐渐意识到UTF-16可能会浪费存储空间,但那是另一个话题了。
低字节序(Little Endian)和高字节序(Big Endian)
Endian读作End-ian或者Indian。这个术语的起源可以追溯到格列佛游记。(小说中,小人国为水煮蛋应该从大的一端(Big-End)剥开还是小的一端(Little-End)剥开而争论,争论的双方分别被称为“大端派”和“小端派”。)
低字节序和高字节序只是一个关于在内存中存储和读取一段字节(被称作words)的约定。这意味着当你让计算机用UTF-16把字母A(占两个字节)存在内存中时,使用哪种字节序方案决定了你把第一个字节放在第二个字节的前面还是后面。这么说有点不太容易懂,让我们来看一个例子:当你使用UTF-16存下来自你朋友的附件时,在不同的系统中它的后半部分可能是这样的:
00 68&00 65&00 6C&00 6C&00 6F(高字节序,高位字节被存在前面)
68 00&65 00&6C 00&6C 00&6F 00(低字节序,低位字节被存在前面)
字节序方案只是一个微处理器架构设计者的偏好问题,例如,Intel使用低字节序,Motorola使用高字节序。
字节顺序标记(BOM)
如果你经常要在高低字节序的系统间转换文档,并且希望区分字节序,还有一种奇怪的约定,被称作BOM。BOM是一个设计得很巧妙的字符,用来放在文档的开头告诉阅读器该文档的字节序。在UTF-16中,它是通过在第一个字节放置FE FF来实现的。在不同字节序的文档中,它会被显示成FF FE或者FE FF,清楚的把这篇文档的字节序告诉了解释器。
BOM尽管很有用,但并不是很简洁,因为还有一个类似的概念,称作「魔术字」(Magic Byte),很多年来一直被用来表明文件的格式。BOM和魔术字间的关系一直没有被清楚的定义过,因此有的解释器会搞混它们。
恭喜你读到这里,你一定是一个很有耐心的读者。
还记得文章开头的问题吗,既然没有「纯文本」文件这回事,那你的文本编辑器和浏览器为什么每次都能正确的显示内容呢?答案是,那些软件欺骗了你,这也是为什么那么多人对编码一无所知。当软件不能确定编码的时候,它会猜测。大部分时候,它会猜测是否是涵盖了ASCII码的UTF-8,还是ISO-8859-1,也有可能猜其他能想到的任意字符集。因为英文中使用的拉丁字母表在几乎所有的字符集中都能显示,包括UTF-8,所以即使编码猜错了,英文字母看起来也是正确的。
但是,如果你在浏览网页时看到?符号,这意味着这个网页的编码不是你的浏览器猜测的那个。这时你可以点开浏览器的查看-&字符编码菜单来尝试不同的编码。
如果你没时间读整篇文章或者你仅仅是略读了一下前面的内容。那请你确保你能理解下面的几条:
1,这个世界上从来没有纯文本这回事,如果你想读出一个字符串,你必须知道它的编码。
2,Unicode是一个简单的标准,用来把字符映射到数字上。Unicode协会的人会帮你处理所有幕后的问题,包括为新字符指定编码。
3,Unicode并不告诉你字符是怎么编码成字节的。这是被编码方案决定的,通过UTF来指定。
还有最重要的:
4,永远记得通过Content-Type或者meta charset标签来显式指定你的文档的编码。这样浏览器就不需要猜测你使用的编码了,他们会准确的使用你指定的编码来渲染文档。
来源声明:本文来自于10K-LOC的博文《》,由IDF实验室封畅翻译。
(全文完)
无尽的学习 只可惜生命只能那么长.而自己却想要知道更多
这家伙很懒,就是不肯写个人说明!
恭喜你读到这里,你一定是一个很有耐心的读者。
必须您当前尚未登录。
必须(保密)
民间信息网络安全爱好者的技术俱乐部机构,致力于信息安全教育普及,以及民间信息安全交流
关注我们 分享每日精选文章

我要回帖

更多关于 unicode编码表 的文章

 

随机推荐