资讯专栏INFORMATION COLUMN

编码解码UNICODE

baukh789 / 2161人阅读

摘要:其他编码的可以参考,,的选择不考虑随机访问,,查找第个字符时间复杂度随机访问,只用之内的字符,,时间复杂度随机访问,超过了,详解编码

1.字符集vs字符编码,编码&解码

Character----->code point----->bytes
前两者字符集的关系,可以统称为codepoint;从codepoint到在计算机上的存储形式,称为编码,反过来称为解码;
字符集:单个符号(character)对应一个无符号数字(通常16进制表示,称为代码点code point),这种对应关系称为字符集
字符编码:代码点与二进制的对应关系称为字符编码,内存或磁盘存储数据的形式为二进制

2.历史:UCS-2(两个字节定长编码)---USC-4,UTF-32(四个字节定长编码)----UTF-16------UTF-8

我国发布的:GB2312---GBK(GB2312的扩展)

3.GB2312:两个字节表示字符码

             兼容ASCII
             一个字节中的1位区分,1表示GB2312字符集,0表示ASCII字符集
             最多可以表示94*94个字符,留有一部分扩展
             编码主要是EUC-CN,兼容ASCII

4.Unicode:4个字节表示

UTF-8,UTF-16,变长编码
    UTF-16,两个字节变长编码(2,4)
    UTF-8,(1,2,3,4)
UTF-32,定长编码(4字节)

5.BMP:

Unicode 标识符通过一个明确的名字和一个整数来作为它的码位(code point).比如,“©” 字符的码位可以用“版权标志”和U+00A9(0xA9,也可以写作十进制 169)来表示。
Unicode 字符分为 17 组平面,每个平面拥有 2^16 (65,536)个码位.有一些码位没有分配字符,也有一些码位被保留,成为私有的,也有一些码位是永远被保留的,作为无字符的标志。每一个码位都可以用 16 进制 xy0000 到 xyFFFF 来表示,这里的 xy 是表示一个 16 进制的值,从 00 到 10。
这第一个位置(当 xy 是 00 的时候)被称为 BMP (基本多文种平面, Basic Multilingual Plane)。它包含了最常用的码位从 U+0000 到 U+FFFF。

6.JS的UTF-16(历史遗留问题,JS选用UTF-16):http://developer.51cto.com/ar...

两个字节为一个单元,LENGTH为1

7.BOM(BYTE ORDER MARK)

UTF-16 (BE)    FE FF    254 255      big endian 大端
UTF-16 (LE)    FF FE    255 254  little endian 小端


UTF-16 与 UTF-32 还有一个不明显的缺点。我们知道不同的计算机存储字节的顺序是不一样的,这也就意味着U+4E2D 在 UTF-16 可以保存为4E 2D,也可以保存成2D 4E,这取决于计算机是采用大端模式还是小端模式,UTF-32 的情况也类似。为了解决这个问题,引入了 BOM (Byte Order Mark),它是一特殊的不可见字符,位于文件的起始位置,标示该文件的字节序。对于 UTF-16 来说,BOM 为U+FEFF(FF 比 FE 大 1),如果 UTF-16 编码的文件以FF FE开始,那么就意味着其字节序为小端模式,如果以FE FF开始,那么就是大端模式。
其他 UTF-* 编码的 BOM 可以参考 Representations of byte order marks by encoding

8.UTF-8,UTF-16,UTF-32的选择:

1)不考虑随机访问,UTF-8,查找第N个字符时间复杂度(O(N))
2)随机访问,只用65535之内的字符,UTF-16,时间复杂度(O(1))
3)随机访问,超过了65535,UTF-32,O(1)

9.详解UTF-8编码

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81157.html

相关文章

  • Python2.x 字符编码终极指南

    摘要:值得注意的是,有的编码方案不一定能表示某些信息,这时编码就会失败,比如就不能用来表示中文。数组的每一项是一个字节,用来表示。所以对于字符串来说,其长度等于编码后字节的长度。所以,让来编码解码中文,就超出了其能力范围。 在人机交互之字符编码 一文中对字符编码进行了详细的讨论,并通过一些简单的小程序验证了我们对于字符编码的认识。但仅了解这篇文章的内容,并不能帮我们在日常编程中躲过一些字符编...

    Amio 评论0 收藏0
  • unicode之痛【精校版】

    摘要:之痛原文地址译者校正实用编程指南这是我在所做的演讲。事实一和二共同造成了计算机设备结构与世界人类需求的一个冲突。就是为了解决之前的老的字符集问题。值意味着,失败时将会返回一个标准的替代字符。将使用进行了解码。 Unicode之痛原文地址: http://nedbatchelder.com/text...译者: yudun1989 校正: sicklife实用Unicode编程指南这是...

    zombieda 评论0 收藏0
  • PyTips 0x09 - Python 中 Unicode 的正确用法

    摘要:只包含了个基本拉丁字母阿拉伯数目字和英式标点符号一共个字符,因此只需要不占满一个字节就可以存储,而则涵盖的数据除了视觉上的字形编码方法标准的字符编码外,还包含了字符特性,如大小写字母,共可包含个字符,而到现在只填充了其中的个位置。 项目地址:https://git.io/pytips 0x07 和 0x08 分别介绍了 Python 中的字符串类型(str)和字节类型(byte),以及...

    shenhualong 评论0 收藏0
  • python编码的意义

    摘要:而他们的中文释义,就是对新手的最大陷阱编码。而码,也就是美国信息交换标准码,年发布,位字符编码中影响最大的一种。 编码,还是编码! python2的直钩——编码异常 当你用python打开一篇中文文档,准备读取里面的数据开始实验...当你处理好你的数据,打算打印出易于阅读的结果给boss检查...甚至当你刚刚开始编写自己的代码,就写了一句话... text = 什么鬼 只要你开始运行自...

    e10101 评论0 收藏0
  • 关于python的编解码(decode, encode)

    摘要:,,等属于不同的字符集,转换编码就是在它们中的任意两者间进行。一般个人用的电脑上控制台基本上都是编码的,但运维的机器上基本全是,中文的时候就会有酸爽的问题。 总结总结,本文仅适用于python2.x 默认编码与开头声明 首先是开头的地方声明编码 # coding: utf8 这个东西的用处是声明文件编码为utf8(要写在前两行内),不然文件里如果有中文,比如 a = 美丽 b = u美...

    shusen 评论0 收藏0

发表评论

0条评论

baukh789

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<