什么是 UTF-8?为什么表情符号和口音占用额外空间
UTF-8 是运行现代网络的编码,几乎每个网页、数据库和 API 都使用它。大多数时候,它的工作原理是无形的,但它解释了一个让人困惑的难题:为什么充满表情符号的短消息对于适合较长纯文本消息的字段来说可能“太大”。这里简单解释了 UTF-8 及其重要性。
UTF-8 是什么
UTF-8 是一种将文本字符表示为字节的方式,字节是计算机实际存储和传输的单位。您键入的每个字符都必须成为字节序列,而 UTF-8 是执行此操作的标准系统。它的巧妙设计在于它是可变宽度的:不同的字符占用不同的字节数。这让它能够代表每种语言和每种表情符号中的每个字符,同时保持纯英文文本的紧凑。它之所以成为主导编码,正是因为它对于普通文本来说既通用又高效。
为什么有些字符占用更多字节
这是关键的想法。 UTF-8 使用一个字节来表示基本字符、英文字母、数字和常用标点符号。但该基本集之外的字符占用更多:大多数重音拉丁字母和许多符号占用两个字节,包括中文、日文和韩文在内的大范围字符占用三个字节,其余字符(包括大多数表情符号)占用四个字节。因此,文本的字节大小完全取决于它包含的字符。简单英语是每个字符一个字节;表情符号有四个。
为什么这对于限制很重要
可变宽度是字符数和字节数可能不同的原因,也是其重要性的原因。许多限制、数据库字段、网络负载、某些 API 请求大小都是以字节而不是字符来衡量的。包含 100 个字节的字段适合 100 个纯英文字符,但如果是两字节重音字母,则只能容纳 50 个字符;如果是四字节表情符号,则只能容纳 25 个字符。这正是为什么视觉上较短、表情符号较多的消息可能会因为太长而被拒绝,而较长的纯文本消息则适合。字节数(而不是字符数)达到了限制。
表情符号惊喜
表情符号值得特别关注,因为它们最容易造成混乱。大多数表情符号都是 UTF-8 格式的四个字节,相当于四个普通字母的空间。有些表情符号是通过组合多个代码点来构建的:旗帜、肤色变体或家庭表情符号可能有很多字节,有时甚至超过十几个字节。因此,单个可见的表情符号可以占据比看起来更多的空间。如果一条简短的、充满表情符号的消息因太长而被拒绝,这种可变宽度、多字节的现实就是原因。
实用的外卖
您很少需要直接考虑 UTF-8,但了解它可以解释实际行为。当限制为字符时,计算字符数。当以字节为单位时,在许多技术环境中,请记住,重音符号和表情符号会使字节成本增加四倍,因此,如果您的文本不是简单的英语,请检查实际字节大小。同时查看字符数和字节大小可以消除猜测,并防止令人困惑的“但它看起来足够短”拒绝。