共计 1405 个字符,预计需要花费 4 分钟才能阅读完成。
本文非完全原创, 更多的是整理后加入
Last-Modified: 2019 年 5 月 10 日 15:24:16
参考链接
- 字符编码笔记:ASCII,Unicode 和 UTF-8
- ASCII,Unicode 和 UTF- 8 终于找到一个能完全搞清楚的文章了
先上总结
Unicode 是一个符号集, 规定了所有符号的二进制编号.
Unicode 也称为 UCS(Universal Multiple-Octet Coded Character Set)
UTF8 是 unicode 的一种编码方式(存储, 传输方式)
ASCII
ascii 码范围: 1~128, 只需要 1 个字节, 最前面的一位固定为 0
unicode 编码占用 3 个字节, 它包含了所有的字符
Unicode 只是一个符号集,它只规定了符号的二进制代码,没有规定这个二进制代码如何存储。
存储 Unicode 的编码方式的常用方式:
- utf-8 变长编码, 长度从 1 个字节~6 个字节不等
- utf-16 占用 2 个字节
- utf-32 占用 4 个字节
utf-8 编码规则
- 对于单字节的符号,字节的第一位设为
0
,后面 7 位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。 - 对于
n
字节的符号(n > 1
),第一个字节的前n
位都设为1
,第n + 1
位设为0
,后面字节的前两位一律设为10
。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。
下表总结了编码规则,字母 x
表示可用编码的位。
Unicode 符号范围(十六进制) | UTF- 8 编码方式(二进制) |
---|---|
0000 0000 ~ 0000 007F | 0xxxxxxx |
0000 0080 ~ 0000 07FF | 110xxxxx 10xxxxxx |
0000 0800 ~ 0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
0001 0000 ~ 0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
在计算机内存中,统一使用 Unicode 编码,当需要保存到硬盘或者需要传输的时候,就转换为 UTF- 8 编码。
用记事本编辑的时候,从文件读取的 UTF- 8 字符被转换为 Unicode 字符到内存里,编辑完成后,保存的时候再把 Unicode 转换为 UTF- 8 保存到文件:
浏览网页的时候,服务器会把动态生成的 Unicode 内容转换为 UTF- 8 再传输到浏览器:
作者:Deft_MKJing 宓珂璟
来源:CSDN
原文:https://blog.csdn.net/Deft_MK…
版权声明:本文为博主原创文章,转载请附上博文链接!
UTF-16
字节顺序标记(Byte Order Mark, BOM), 位于文档开头的前 2 个字节, 用于标记存储的字节序, 是按 “ 大端 ” 还是 ” 小端 ” 顺序存储.
借个图(UTF8 你
的 utf8 编码存储文件内容):
feff
表示内容是按大端序存储: 高位字节放在内存的低地址,低位字节放在内存的高地址
fffe
表示内容是按小端序存储:低位字节放在内存的低地址,高位字节放在内存的高地址。
UTF- 8 不需要 BOM 来表明字节顺序,但可以用 BOM 来表明编码方式。字符 ”ZERO WIDTH NO-BREAK SPACE” 的 UTF- 8 编码是 EF BB BF
U
的 UTF16 编码是 0055
, 但按照小端序存储时是 5500
注意, utf8 并没有这个烦恼, 不要搞乱.
在 UTF16 下,存储的字节值和 unicode 是一一对应的。但是 UTF16 显示英文(asni)就浪费一个字节。
其他
英文字符编码 ANSI
简体中文 GB2312
繁体中文 Big5