为什么 GBK 只能解码、不能编码?
浏览器的 TextEncoder 按规范只支持 UTF-8,无法把文本编码成 GBK 字节;而 TextDecoder 支持 GBK、Big5、Shift_JIS 等解码。所以本工具的「字节 → 文本」可以选择这些字符集,「文本 → 字节」只提供 UTF-8。这与浏览器本身的限制一致。
HTML 实体、Unicode 转义、进制转换与多字符集解码
同一个字符在不同场景下有不同的表示方式:网页里用 HTML 实体(<),JavaScript 字符串里用 \uXXXX,CSS 里用反斜杠加十六进制码点,而调试乱码时又需要直接查看字节。这些形式之间互转很容易出错,尤其是 emoji 这类需要代理对的字符。
本工具提供四组转换:HTML 实体编解码(支持命名实体与数字实体)、Unicode 转义(JavaScript / CSS / HTML / 码点四种风格互转)、2 到 36 进制互转(用 BigInt 实现,64 位整数也不会丢精度),以及字节与文本的互转——可以把十六进制或 %XX 字节串按 UTF-8、GBK、Big5、Shift_JIS 等字符集解码,快速定位中文乱码的成因。
浏览器的 TextEncoder 按规范只支持 UTF-8,无法把文本编码成 GBK 字节;而 TextDecoder 支持 GBK、Big5、Shift_JIS 等解码。所以本工具的「字节 → 文本」可以选择这些字符集,「文本 → 字节」只提供 UTF-8。这与浏览器本身的限制一致。
码点超过 U+FFFF 的字符在 UTF-16 中用代理对表示,例如 🚀(U+1F680)会写成 \ud83d\ude80,占两个 16 位码元。如果要得到单个码点写法,请切换到「码点 U+XXXX」风格,或使用 \u{1F680} 语法。
不会。内部使用 BigInt 做任意精度运算,ffffffffffffffff(十进制 18446744073709551615)这类超出 JavaScript 安全整数范围的数值也能精确转换。