字符转换成编码

编程语言: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+0800U+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 个字节:

    • 第一个字节:11101000E8

    • 第二个字节:100111119F

    • 第三个字节:10111110BE

  • 因此,对于中文字符 “蟾”,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}`);


参考资料

在线编码转换工具Unicode 官方文档

2024年12月29日

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容