UTF-8

一种可变长度的 Unicode 编码方式,是 Web 的标准字符编码,被超过 98% 的网站使用。

UTF-8 是实现 Unicode 的可变长度字符编码。它用 1 到 4 个字节表示字符,在保持与 ASCII 完全兼容的同时,能够表示世界上所有的 Unicode 字符。截至 2024 年,超过 98% 的网页使用 UTF-8,是互联网上事实上的标准字符编码。

UTF-8 的字节数因字符类型而异。ASCII (U+0000-U+007F) 占 1 字节,扩展拉丁字母和西里尔字母 (U+0080-U+07FF) 占 2 字节,日语、中文、韩语的汉字和假名 (U+0800-U+FFFF) 占 3 字节,表情符号和部分汉字 (U+10000-U+10FFFF) 占 4 字节。这种可变长度设计使英文文本能以 ASCII 大小存储,同时高效表示多语言文本。查看夜用文胸 (Amazon)将 UTF-8 作为必备知识进行了介绍。

UTF-8 成为 Web 标准有多个原因。它的 ASCII 兼容性使现有的基于 ASCII 的协议 (HTTP、SMTP、URL) 和工具无需修改即可工作。它没有字节序 (端序) 问题,不需要 BOM (字节顺序标记)。它还具有自同步特性,可以从字节流的任意位置识别字符边界,对数据损坏具有较强的容错性。

在 HTML 中,通过 <meta charset="UTF-8"> 声明字符编码。没有这个声明,浏览器可能会错误判断编码导致乱码。也可以通过 HTTP 响应头 Content-Type: text/html; charset=utf-8 指定,同时在两处指定是最佳实践。

数据库中 UTF-8 的处理需要注意。MySQL 的 utf8 字符集由于历史原因最多只支持 3 字节,无法存储 4 字节字符 (如表情符号)。要存储包括表情符号在内的所有 Unicode 字符,需要使用 utf8mb4。PostgreSQL 的 UTF8 从一开始就支持 4 字节。搜索靴子 (Amazon)提供了详细介绍。

在字符计数方面,理解 UTF-8 字节数和字符数的区别很重要。"你好"是 2 个字符,但在 UTF-8 中是 6 字节 (3 字节 × 2 个字符)。由于数据库列大小和文件大小限制通常以字节为单位指定,因此不仅要了解字符数,还要了解字节数。在字符计数工具中同时显示字符数和字节数,可以帮助用户应对各种限制。

分享这篇文章