编程语言:JavaScript;目标效果:将字符转换成 UTF-8 / URL 编码。
相关概念
- Unicode 是一个国际编码标准,旨在为世界上所有书写系统中的字符提供唯一的数字表示,每个字符都有一个唯一的代码点,通常以
\u
开头,后面跟着一串十六进制数字。 - UTF-8(Unicode Transformation Format 8-bit)是一种具体的编码形式,它告诉计算机如何将 Unicode 代码点转换为字节序列,以便于存储或传输。它能够兼容 ASCII,并且可以对所有 Unicode 字符进行编码。
- URL 编码是一种具体的编码形式,在 HTTP GET 请求中,URL 中的非 ASCII 字符需要被编码,以便在网络上传输。通常,浏览器和服务器默认使用的编码方式是 UTF-8 结合百分比编码,也称为 URL 编码。
要避免直接在 URL 中使用未编码的非 ASCII 字符,否则有可能因为不兼容导致乱码。
验证:可以通过 在线工具 来实现字符和编码的相互转换。
手动推演过程
1. Unicode 代码点
找到中文字符对应的 Unicode 代码点,可以通过 Unicode 官方文档 查找,也可以通过在线工具完成。
在文档中,“蟾” 对应的 Unicode 代码点是
\u87fe
,或者U+87FE
。
Unicode 代码点
2. UTF-8 编码规则
对于 Unicode 代码点在 U+0800
到 U+FFFF
之间的字符(包括大部分汉字),UTF-8 使用 3 个字节进行编码。
每个字节的格式如下:
第一个字节:
1110xxxx
,前 4 位是1110
,后 4 位是代码点的高 4 位。第二个字节:
10xxxxxx
,前 2 位是10
,后 6 位是代码点的中间 6 位。第三个字节:
10xxxxxx
,前 2 位是10
,后 6 位是代码点的低 6 位。
对于 U+87FE
:
代码点
87FE
的二进制表示是1000 0111 1111 1110
;-
根据 UTF-8 规则,将其拆分为 3 个字节:
第一个字节:
11101000
→E8
第二个字节:
10011111
→9F
第三个字节:
10111110
→BE
因此,对于中文字符 “蟾”,Unicode 代码点为
U+87FE
,在 UTF-8 编码是E8 9F BE
。
3. URL 编码
URL 编码的基本规则是将 UTF-8 编码的每个字节用 %
加上两位十六进制数表示。
因此,E8 9F BE
在 URL 编码中表示为 %E8%9F%BE
。
编程实现
使用 JavaScript 语言来完成这个转换操作。
// 原始中文字符
const char = '蟾宫曲';
// 1. 找到对应的 Unicode 代码点,将其转换为 UTF-8 编码 (字节数组)
const encoder = new TextEncoder();
const utf8Bytes = encoder.encode(char);
// 2. 将 UTF-8 字节数组转换为十六进制字符串
const utf8Hex = Array.from(utf8Bytes)
.map(byte => byte.toString(16).padStart(2, '0'))
.join(' '); // 以空格分隔的十六进制字节
// 3. 进行 URL 编码
const urlEncoded = encodeURIComponent(char);
// 输出结果
console.log(`原始字符: ${char}`);
console.log(`UTF-8 编码: ${utf8Hex}`);
console.log(`URL 编码: ${urlEncoded}`);
参考资料
2024年12月29日