跳到主要内容

Unicode 转 UTF-8

快速字符串示例

点击下方示例快速体验不同类型的字符串编码

💡 提示:点击任意示例即可快速填入,支持中文、Unicode、Emoji 等多种字符类型

转化过程解析

Unicode
二进制
UTF-8
前缀码
Unicode 二进制分组
Unicode 二进制分组区分

UTF-8 小解

UTF-8(8-bit Unicode Transformation Format)是一种针对 Unicode 的可变长度字符编码,也是一种前缀码。见 UTF-8。

它可以用一至四个字节对 Unicode 字符集中的所有有效编码点进行编码,属于 Unicode 标准的一部分。由于较小值的编码点一般使用频率较高,直接使用 Unicode 编码效率低下,大量浪费内存空间。

UTF-8 为了解决向后兼容 ASCII 而设计,Unicode 中前 128 个字符使用与 ASCII 相同的二进制值的单个字节进行编码,且字面与 ASCII 一一对应,使得原来处理 ASCII 字符的软件无须或只须做少部分修改即可继续使用。

UTF8 Code Point Prefix

Number of bytesBits for code pointFirst code pointLast code pointByte 1Byte 2Byte 3Byte 4
17U+0000U+007F0xxxxxxx
211U+0080U+07FF110xxxxx10xxxxxx
316U+0800U+FFFF1110xxxx10xxxxxx10xxxxxx
421U+10000U+10FFFF11110xxx10xxxxxx10xxxxxx10xxxxxx

其中:128 个 ASCII 字符只需一个字节;带附加符号的拉丁文、希腊文等需两个字节;基本平面(BMP)中的大部分常用字(如大部分汉字)使用三个字节;辅助平面的字符(如 emoji)使用四字节。

转化过程

  1. 将数据转化为 unicode 的 codePoint(如 str.codePointAt(0))
  2. 根据前缀表确定所占用的字节数
  3. 根据字节数确定前缀,将 codePoint 转化为二进制从右填充
  4. 将每八个二进制计算得出 UTF-8 编码

例如「山」:codePoint 0x9053,占三字节,前缀 1110xxxx 10xxxxxx 10xxxxxx,填充得 11101001 10000001 10010011,即 E9 81 93。