惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
Google Developers Blog
J
Java Code Geeks
爱范儿
爱范儿
Microsoft Azure Blog
Microsoft Azure Blog
美团技术团队
人人都是产品经理
人人都是产品经理
Martin Fowler
Martin Fowler
IT之家
IT之家
博客园_首页
B
Blog RSS Feed
Google DeepMind News
Google DeepMind News
B
Blog
U
Unit 42
Apple Machine Learning Research
Apple Machine Learning Research
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
N
Netflix TechBlog - Medium
T
Tailwind CSS Blog
博客园 - 聂微东
腾讯CDC
A
About on SuperTechFans

博客园 - sudochen

linux kernel format nand for ubifs ipq95xx rdp433 烧写运行openwrt25 git多用户管理 以太网EthernetII,LLC,SNAP判断 命令行获取公网IP地址 免密SSH登录Openwrt 研发管理的一般流程 haserl repo error with python3.10 on ubuntu22.04 京东AX3000后裔刷机 ebtables Ubuntu建立samba共享目录 linux文件的时间 IP优先级TOSDSCP SFP光模块定义 i2ctools工具使用 linux内核Makefile和busybox编译 I2C协议 SPI协议 免费ARP FEM介绍 notepad++每两个字符添加一个空格
UTF-8
sudochen · 2024-12-30 · via 博客园 - sudochen

UTF-8

无论是UTF-16/32还是UCS-2/4,一个字符都需要多个字节来编码。

在UTF-8编码中,ASCII码中的字符还是ASCII码的值,只需要一个字节表示,其余的字符需要2字节、3字节或4字节来表示。

UTF-8的编码规则:

(1) 对于ASCII码中的符号,使用单字节编码,其编码值与ASCII值相同。其中ASCII值的范围为0~0x7F,所有编码的二进制值中第一位为0(这个正好可以用来区分单字节编码和多字节编码)。

(2) 其它字符用多个字节来编码(假设用N个字节),多字节编码需满足:第一个字节的前N位都为1,第N+1位为0,后面N-1 个字节的前两位都为10,这N个字节中其余位全部用来存储Unicode中的码位值。

字节数 Unicode UTF-8编码
1 000000-00007F 0xxxxxxx
2 000080-0007FF 110xxxxx 10xxxxxx
3 000800-00FFFF 1110xxxx 10xxxxxx 10xxxxxx
4 010000-10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

区别

(1) 简单地说:Unicode属于字符集,不属于编码,UTF-8、UTF-16等是针对Unicode字符集的编码。

(2) UTF-8、UTF-16、UTF-32、UCS-2、UCS-4对比:

对比 UTF-8 UTF-16 UTF-32 UCS-2 UCS-4
编码空间 0-10FFFF 0-10FFFF 0-10FFFF 0-FFFF 0-7FFFFFFF
最少编码字节数 1 2 4 2 4
最多编码字节数 4 4 4 2 4
是否依赖字节序

UTF-8 BOM

UTF-8 BOM(Byte Order Mark)是一个特殊的字符序列,用于表示文本文件使用 UTF-8 编码。BOM 本身是可选的,在 UTF-8 中并不影响文本内容的实际表示,但它可以在文件的开头插入一个特定的字节序列 EF BB BF,作为文件的编码标识符,一般windows比较常用。

vim下,使用命令 :set nobomb 来去除 BOM防止在php,html中的影响