[转]字符编码,ansi, unicode,utf-8, utf-16
目前最流行和最有前途的字符编码规范,因为它解决了不同语言编码的冲突。
最初的字符编码ascii(8bit,最高位为0)只能表示128个字符,表示英文、数字和一些符号是没问题。但是世界不止一种语言,即使用上了最高为1的扩展ascii码,也只有256个字符。
对中日韩文、阿拉伯文之类复杂的文字,就无法使用了。
于是,各国都制定了自己的兼容ascii编码规范,就是各种ANSI码,比如我国的gb2312,用两个扩展ascii字符来表示一个中文。但是这些ansi码无法同时存在,因为它们的定义互相重叠,要自由使用不同语言就必须有一个新编码,为各种文字统一分配编码。
ISO(国际标准化组织)和Uicode协会(一个软件制造商的协会)分别开始了这个工作。即ISO的ISO 10646项目和Unicode协会的Unicode项目。后来它们开始合并了双方的工作成果,采用相同的字库和字码。但目前两个项目都存在并独立地公布自己的标准。
这 是Uicode在ISO的名称,目有两套编码方法,UCS-2(Unicode)用2个字节表示一个字符,UCS-4(Unicode-32)用4个字节 表示一个字符。UCS-4是由USC-2扩展来的,增加了2字节的高位。即使是老UCS-2,它也可以表示2^16=65535个字符,基本上可以容纳所 有常用各国字符,所以目前基本都使用UCS-2。
Unicode 使用2个字节表示一个字符,ascii使用1个字节,所以在很多方面产生了冲突,以前处理ascii的方法都必须重写。而且C语言用\0作为字符串结束标 志,但Unicode中很多字符都含\0,C语言的字符串函数也无法正常处理Unicode。为了把unicode投入实用,出现了UTF,最常见的是 UTF-8和UTF-16。
其中UTF-16和Unicode本身的编码是一致的,UTF-32和UCS-4也是相同的。最重要的是UTF- 8,可以完全兼容ascii编码 。UTF是一种变长的编码,它的字节数是不固定的,使用第一个字节确定字节数。第一个字节首为0即一个字节,110即2字节,1110即3字节,字符后续 字节都用10开始,这样不会混淆且单字节英文字符可仍用ASCII编码。理论上UTF-8最大可以用6字节表示一个字符,但Unicode目前没有用大于 0xffff的字符,实际UTF-8最多使用了3个字节。
Unicode码范围 UTF-8编码(把Unicode码转为二进制填充x处)
0000-007F 0xxxxxxx
0080-07FF 110xxxxx 10xxxxxx
0800-FFFF 1110xxxx 10xxxxxx 10xxxxxx
汉字的Unicode编码范围是0080-07FF,因此是2字节编码。
Unicode存储时有个字节序问题,就是一个多字节数字,是从大到小排列还是反之。这和CPU处理有关,一般x86处理时都是倒置的,即大数在前。就像“莫”字的Unicode码0x83ab,按Big Endian就变成了0xab83。
因为Unicode存储时字节序的问题,在Unicode文本前插入一个不存在的字符(ZERO WIDTH NO-BREAK SPACE)作为标志来分辨两种字节序。标志0xfeff说明按Big Endian字节序,而0xfffe说明Little-Endian。
UTF-8不需要BOM来说明字节序,但可以用BOM标志编码方式。遇到带0xefbbbf开头的文本,计算机就可以不需要分辨直接按UTF-8编码处理。
BMP(Basic Multilingual Plane):
这是Unicode实际和字符对应的划分方式中的概念。
按UCS-4为例子
首字节首位恒为0,剩下7位可以划分2^7=128个group(组)。
第二个字节,每个group下面可以有2^8=256个plane(平面)。
第三个字节,可以给每个palne带来256个row(行)。
第四个字节,这里的8位又可以每row可以划分256个cell(格子)。
group 0中的plane 0就是BMP,即前两个字节为0x0000的UCS-4码。去掉0x0000的BMP上的UCS-4就变成了UCS-2编码。或者说UCS-2是USC- 4的子集,BMP就是UCS-2在USC-4中的位置。我们从这里还可以得到USC-2转为UCS-4的方法,再UCS-2前面插入2个字节 0x0000。
第二篇:
0、big endian和little endian
3、UCS-2、UCS-4、BMP
║UCS-2编码(16进制) ║UTF-8 字节流(二进制) ║
║------------------------║----------------------------║
║0000 - 007F ║0xxxxxxx ║
║0080 - 07FF ║110xxxxx 10xxxxxx ║
║0800 - FFFF ║1110xxxx 10xxxxxx 10xxxxxx ║
╚════════════╩══════════════╝
例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 110001 001001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。
"Character set encoding basics Understanding character set encodings and legacy encodings" (http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&item_id=IWS-Chapter03)
转载于:https://www.cnblogs.com/robertzml/archive/2009/11/04/1595730.html
[转]字符编码,ansi, unicode,utf-8, utf-16相关推荐
- 字符编码 ansi unicode utf-8 区别
简介 为使计算机支持更多语言,通常使用 0x80~0xFFFF 范围的 2 个 字节来表示 1 个字符.比如:汉字 '中' 在 ANSI编码 中文操作系统中,使用 [0xD6,0xD0] 这两个字节存 ...
- 记事本字符编码没有Unicode选项
记事本字符编码没有Unicode选项 Windows 10更新1903版本后,记事本的几种编码模式改了名称: 旧版的"Unicode"相当于新版的"UTF-16 LE&q ...
- 字符编码ANSI和ASCII区别、Unicode和UTF-8区别
一.位: 计算机存储信息的最小单位,称之为位(bit),音译比特,二进制的一个"0"或一个"1"叫一位. 二.字节 字节(Byte)是一种计量单位,表示数据量多 ...
- 关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
出处: https://www.cnblogs.com/haimishasha/p/6117968.html 目录 1.1. ISO-8859-1 通常叫做Latin-1 1.2. GB2312/GB ...
- 计算机字符编码及Unicode简介(转)
计算机,毫无疑问是一部机器,在最初我们接触计算机时或者接收计算机教育时,我们就知道:计算机能识别的只有0和1组成的二进制编码.人与计算机交互早期也是用二进制编码方式,当时人们或通过扳动计算机庞大的面板 ...
- 字符编码、Unicode原理、数据流压缩Zlib与Miniz的实现
字符集和字符编码的区别和联系 字符集:多个字符的集合.例如 GB2312 是中国国家标准的简体中文字符集,GB2312 收录简化汉字(6763 个)及一般符号.序号.数字.拉丁字母.日文假名.希腊字母 ...
- 字符编码:ASCII,Unicode(UTF-8)
1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte). ...
- 字符编码、unicode、代码页、矢量字体及多国语开发
无辜的"联通": 在windows下打开一个记事本,输入"联通"保存后,再次打开却发现"联通"不见了 首先了解,不同编码文本的存储,开头字节 ...
- 字符编码:Unicode和UTF-8之间的关系
Unicode和UTF-8之间的关系 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256 ...
- 字符编码 ASCII,Unicode和UTF-8的关系
转自:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143166410626 ...
最新文章
- 如何使用Nsight System?
- 理解oracle中连接和会话
- Java监听器的用法(一):内部类监听器
- 2021-03-20 包含生成树的性质
- 英特尔携手百度全方位深化合作 共筑智能生态
- 上传更新的代码到gitlab
- ubuntu 在vm中如何上网及注意问题
- 微信语音识别及网页获取用户信息
- Yii 2.0 权威指南(1) 第一次问候
- 58技术主席孙玄:硬核揭秘万亿级微服务分布式事务实战!
- 开源GIS--geos实现空间连接
- 安装win10虚拟机遇到的坑
- 阿里云DDoS防护是如何工作的?
- 答大三犹豫考研的同学兼向大一学生叨叨几句
- Web 前端基础知识面试大全
- java map tostring_Map转为String
- 从下象棋的角度来类比浅析H.264中的像素残差和运动矢量残差
- win10引导安卓x86_GPDwin安装安卓x86折腾记(上)
- Jvm面试题及答案(300道 Jvm面试题大全带答案)
- SAP Business One系统中如何创建财务报表模板