返回

字符集转换与乱码诊断

编码转换

正在载入

正在加载工具

正在准备工具,暂时无法估算剩余时间。

本工具的全部运算都发生在你的浏览器中,输入内容不会发送到任何服务器。

关于这个工具

保留原有 UTF-8、UTF-16LE、UTF-16BE 文本、十六进制及 Base64 转换功能。独立的乱码诊断面板检查粘贴的 Unicode 文本或本地文件原始字节,完整保留来源并列出有界、可解释的候选。它不能可靠检测编码,也不能证明作者原本想表达什么。

常见用途

  • 将已知文本编码为 UTF-8 或指定字节序的 UTF-16,或用原转换器解码已知格式的十六进制与 Base64。
  • 调查一次错误解码,例如 UTF-8 字节曾被当作 Windows-1252 读取,同时保留粘贴的原文。
  • 在复制、替换字符或编辑器保存丢失字节之前,对原始本地文件比较明确的解码路线。
  • 审阅转义控制字符、BOM 证据及路线假设,再主动选择一个候选,以 UTF-8 复制或下载。

使用方法

  1. 1.普通转换:选择编码或解码、UTF-8/UTF-16LE/UTF-16BE 以及 Hex/Base64,输入内容并运行原转换器。
  2. 2.乱码诊断:选择粘贴文本或原始本地文件并运行诊断。文本恢复反向验证一次假设的错误解码;文件诊断则按明确路线解码实际字节。审阅未改动的来源与各项证据。
  3. 3.候选按固定路线顺序显示,不给置信百分比,也不按语言排序。选择候选并确认已审阅后,才可复制或下载完整 UTF-8 文本。编辑、取消或更换来源会使旧结果失效。

可执行的编码与恢复示例

保留的 UTF-8 / Hex 转换

request (ASCII JSON): {"mode":"converter","operation":"encode","encoding":"utf-8","format":"hex","input":"\u4f60\u597d"}
{"output":"E4BDA0E5A5BD"}

原转换器仍输出这两个字符的六个 UTF-8 字节。

保留的 UTF-16BE / Base64 转换

request (ASCII JSON): {"mode":"converter","operation":"encode","encoding":"utf-16be","format":"base64","input":"A\ud83d\ude00"}
{"output":"AEHYPd4A"}

字节 00 41 D8 3D DE 00 包含完整代理对;字节序明确选择为大端。

保留的 UTF-16LE / Hex 解码

request (ASCII JSON): {"mode":"converter","operation":"decode","encoding":"utf-16le","format":"hex","input":"41003DD800DE"}
{"output":"A\ud83d\ude00"}

原有解码模式按明确选择的小端字节还原同一文本。

两条路线得到同一候选文本

request (ASCII JSON): {"mode":"text","text":"caf\u00c3\u00a9"}
{"candidates":[{"id":"windows-1252-to-utf-8","text":"caf\u00e9","byteRoundTrip":true,"stringRoundTrip":true},{"id":"iso-8859-1-to-utf-8","text":"caf\u00e9","byteRoundTrip":true,"stringRoundTrip":true}],"nativeOptional":true,"otherwise":"unsupported: native decoder unavailable or conformance check failed"}

两种单字节假设都重建 63 61 66 C3 A9;输出相同不能证明过去使用了哪种解码。 原生 Windows-1252 解码器不可用或不一致时会明确标为不支持;字面路线保持独立。

C1 控制字符需要字面路线

request (ASCII JSON): {"mode":"text","text":"\u00e2\u0080\u0099"}
{"candidates":[{"id":"iso-8859-1-to-utf-8","text":"\u2019","byteRoundTrip":true,"stringRoundTrip":true}],"missing":["windows-1252-to-utf-8"]}

字面码点 E2 80 99 重建 UTF-8 弯引号字节。Windows-1252 的 80 映射到 U+20AC,不能将 U+0080 逆映射为该字节。

中文的一步恢复假设

request (ASCII JSON): {"mode":"text","text":"\u00e4\u00bd\u00a0\u00e5\u00a5\u00bd"}
{"candidates":[{"id":"windows-1252-to-utf-8","text":"\u4f60\u597d","byteRoundTrip":true,"stringRoundTrip":true},{"id":"iso-8859-1-to-utf-8","text":"\u4f60\u597d","byteRoundTrip":true,"stringRoundTrip":true}],"nativeOptional":true,"otherwise":"unsupported: native decoder unavailable or conformance check failed"}

精确字节变换得到这些字符,不参考语言频率。来源中的 U+00A0 以转义形式显示。 原生 Windows-1252 解码器不可用或不一致时会明确标为不支持;字面路线保持独立。

问号不提供可恢复历史

request (ASCII JSON): {"mode":"text","text":"Order?"}
{"candidates":[{"id":"original-text","text":"Order?","unchanged":true}],"warnings":["question-mark-may-be-original"]}

来源保持不变。问号可能有意输入,也可能来自先前替换;工具无法区分这两种历史。

已有 U+FFFD 保留为转义预览

request (ASCII JSON): {"mode":"text","text":"bad\ufffd"}
{"candidates":[{"id":"original-text","text":"bad\ufffd","unchanged":true}],"missing":["windows-1252-to-utf-8","iso-8859-1-to-utf-8"],"warnings":["replacement-may-be-original"]}

不会编造缺失字母。两种单字节逆向路线都无法编码 U+FFFD,因此保留原文。

拒绝不成对代理项

request (ASCII JSON): {"mode":"text","text":"\ud800"}
{"error":"unpaired-surrogate"}

ASCII JSON 能安全描述该无效 UTF-16 值。诊断会先拒绝它,避免 UTF-8 导出时静默替换。

预览转义双向字符、换行与 NUL

request (ASCII JSON): {"mode":"text","text":"A\u202eB\n\u0000"}
{"candidates":[{"id":"original-text","text":"A\u202eB\n\u0000","unchanged":true}],"preview":"A\\u202EB\\n\\u0000"}

预览仅含可打印 ASCII,不会重排周围标签。手动选择的 UTF-8 导出仍含原始字符,不是安全净化。

保留 UTF-8 BOM 码点

request (ASCII JSON): {"mode":"bytes","hex":"EF BB BF 41"}
{"candidates":[{"id":"decode-utf-8","text":"\ufeffA","byteRoundTrip":true}],"bom":"utf-8"}

诊断解码保留开头 U+FEFF;UTF-8 导出得到 EF BB BF 41,不添加或删除字符。

包含代理对的明确 UTF-16LE

request (ASCII JSON): {"mode":"bytes","hex":"FF FE 41 00 3D D8 00 DE"}
{"candidates":[{"id":"decode-utf-16le","text":"\ufeffA\ud83d\ude00","byteRoundTrip":true}],"bom":"utf-16le"}

小端路线还原 Unicode 文本并保留 U+FEFF。诊断下载是 UTF-8,不是原始 UTF-16 字节。

相同文本的明确 UTF-16BE

request (ASCII JSON): {"mode":"bytes","hex":"FE FF 00 41 D8 3D DE 00"}
{"candidates":[{"id":"decode-utf-16be","text":"\ufeffA\ud83d\ude00","byteRoundTrip":true}],"bom":"utf-16be"}

大端与小端是独立路线;解码成功仅说明该路线成立,不证明文件历史。

无效 UTF-8 路线失败

request (ASCII JSON): {"mode":"bytes","hex":"C3 28"}
{"missing":["decode-utf-8"],"invalidAttempts":["decode-utf-8"]}

C3 后的 28 不是续字节。不会生成带替换字符的 UTF-8 候选;其他编码仍只是独立假设。

拒绝奇数字节 UTF-16

request (ASCII JSON): {"mode":"bytes","hex":"41"}
{"missing":["decode-utf-16le","decode-utf-16be"],"invalidAttempts":["decode-utf-16le","decode-utf-16be"]}

一个字节不足以组成 UTF-16 代码单元,两种字节序都失败;它仍可能是合法单字节或 UTF-8 文本。

字节 80:网页别名与字面映射

request (ASCII JSON): {"mode":"bytes","hex":"80"}
{"candidates":[{"id":"decode-windows-1252","text":"\u20ac","byteRoundTrip":true},{"id":"decode-iso-8859-1-literal","text":"\u0080","byteRoundTrip":true}],"nativeOptional":true,"otherwise":"unsupported: native decoder unavailable or conformance check failed"}

Windows-1252 得到 U+20AC,字面 ISO-8859-1 得到 C1 控制字符 U+0080。WHATWG 的 ISO-8859-1 别名属于 Windows-1252 解释。 原生 Windows-1252 解码器不可用或不一致时会明确标为不支持;字面路线保持独立。

明确的 WHATWG Shift_JIS 解码

request (ASCII JSON): {"mode":"bytes","hex":"82 A0"}
{"candidates":[{"id":"decode-shift_jis","text":"\u3042","byteRoundTrip":null}],"nativeOptional":true,"otherwise":"unsupported: native decoder unavailable or conformance check failed"}

原生 Shift_JIS 路线解码这些字节。未提供传统编码器,因此字节往返证据为 null,而不是真。 如果原生解码器不可用或未通过一致性检查,该路线会明确标为不支持。

明确的 GB18030 解码

request (ASCII JSON): {"mode":"bytes","hex":"D6 D0 CE C4"}
{"candidates":[{"id":"decode-gb18030","text":"\u4e2d\u6587","byteRoundTrip":null}],"nativeOptional":true,"otherwise":"unsupported: native decoder unavailable or conformance check failed"}

该常见映射由宿主运行时解码。未固定 GB18030 修订版,不声称字节往返证明,也不进行语言排序。 如果原生解码器不可用或未通过一致性检查,该路线会明确标为不支持。

明确的 WHATWG Big5 解码

request (ASCII JSON): {"mode":"bytes","hex":"A4 A4 A4 E5"}
{"candidates":[{"id":"decode-big5","text":"\u4e2d\u6587","byteRoundTrip":null}],"nativeOptional":true,"otherwise":"unsupported: native decoder unavailable or conformance check failed"}

在支持时使用浏览器 Big5 映射,不保证与所有历史 Big5 实现相同;往返证据仍为未测试。 如果原生解码器不可用或未通过一致性检查,该路线会明确标为不支持。

UTF-32 签名是证据,不代表支持

request (ASCII JSON): {"mode":"bytes","hex":"FF FE 00 00 41 00 00 00"}
{"bom":"utf-32le","warnings":["utf32-not-supported"]}

此前缀被记录为 UTF-32LE 证据,但不提供 UTF-32 解码器。不要把其他合法解释误认为自动 UTF-32 恢复。

安全理解诊断结果

  • 不要把第一个候选当作正确答案。固定路线顺序不是置信度排名。
  • 不要把十六进制粘贴到文本恢复输入框并期待按字节处理。请使用原有 Hex/Base64 转换器,或在诊断文件模式提供原始文件。
  • 不要混淆浏览器 ISO-8859-1 别名与明确标明的字面 ISO-8859-1 路线,两者对 C1 范围字节的解释不同。
  • UTF-8 或 UTF-16 路线失败只说明该假设不成立;另一传统编码路线成功也不能证明真实编码。
  • 文件开头的 EF BB BF、FF FE、FE FF 可提供 BOM 证据,但明确字节序路线仍互相独立,诊断文本会保留 U+FEFF。
  • 不成对代理项无法无损导出为 UTF-8,应取得格式正确的源数据,不接受静默替换。
  • 下面的转义示例采用 ASCII JSON,显示的 \uXXXX 与 \n 描述字符,不是在页面中嵌入会生效的控制字符。

限制与说明

  • 诊断只提供假设,不是可靠编码检测。严格解码成功或精确往返仅说明该路线自洽;多条路线都可能产生合法文本,不能据此证明原始编码或含义。 文本逆向恢复要求粘贴的每个字符都能映射回假设的传统编码字节,再进行严格 UTF-8 解码。仅尝试支持的一步路线,不递归修复、不纠正拼写、不翻译,也不自动覆盖。
  • WHATWG TextDecoder 中的 ISO-8859-1、latin1 和 ascii 标签实际指向 Windows-1252。单独标明的字面 ISO-8859-1 路线则把 00–FF 字节直接映射到 U+0000–U+00FF,包含 C1 控制字符,与浏览器别名明确区分。 文件路线包括 UTF-8、UTF-16LE、UTF-16BE、Windows-1252、字面 ISO-8859-1、Shift_JIS、GB18030、Big5。后三者使用可用的原生 WHATWG 解码器,没有传统编码器,字节往返证据标为未测试。Shift_JIS 采用网页兼容映射;GB18030 版本取决于运行时,Big5 可能不同于历史实现。不解码 UTF-32,识别到的前缀仅作警告。 原生路线还需通过代表性一致性检查;未通过时标为不支持,不输出误导性候选。
  • 诊断的 Unicode 路线拒绝无效 UTF-8、奇数字节 UTF-16 与不成对代理项。UTF-16LE、UTF-16BE 是明确假设,不是自动字节序检测。解码后的开头 U+FEFF 会保留;EF BB BF、FF FE、FE FF 仅作证据,不代表可以删掉数据。 U+FFFD 或问号可能已替代丢失的信息,但它们也可能是作者有意输入的字符,单凭出现无法证明损坏或找回原字节。工具不会编造丢失历史;尽量取得原文件或备份。
  • 诊断最多接受 64 KiB(65,536)原始文件字节;粘贴文本必须同时不超过 65,536 个 UTF-16 代码单元和 64 KiB 的 UTF-8。最多 12 个候选,每个最多 65,536 代码单元与 262,144 UTF-8 字节。可取消工作线程 5 秒超时,本地文件读取 15 秒超时。超限输入被拒绝,不静默截断。
  • 诊断预览对非 ASCII、控制及双向文本字符转义;预览可能缩短,但显式选择的导出包含完整候选,包括控制字符与 U+FEFF。这不是安全净化,不会自动应用候选,也不会覆盖原始文件。 处理在本地完成,不上传输入、不持久存储。诊断仅复制或下载 UTF-8,不写出传统编码。独立的原转换器仍保留 4 MiB 编码后文本、8 MiB 解码字节、16 MiB 编码字符上限及原有二进制下载。

常见问题

粘贴文本恢复与解码文件有什么区别?

粘贴文本已在某处被解码过。逆向路线假设之前发生了特定错误,从字符重建字节,再严格按 UTF-8 解码。原始文件仍提供实际字节,可以直接按路线解码而无需猜测这一步历史。尽量保留原始字节副本。

候选或往返成功能证明原始编码吗?

不能。ASCII 在多种编码中通用,其他字节也可能被多条路线合法解码。往返只检查声明的变换是否自洽。候选顺序固定,没有概率评分、语言猜测或自动最佳项。

Windows-1252 与字面 ISO-8859-1 为什么不同?

兼容网页的 ISO-8859-1 标签是 Windows-1252 别名,其中字节 80 对应 U+20AC。单独命名的字面路线把 80 对应到 U+0080。逆向恢复使用错误映射可能失败或得到不同候选,应检查转义码点及来源。

能找回丢失字符吗,下载又会保留什么?

仅凭这些字符无法恢复。多个原始输入可以变成同一个替换字符,因此这里无法知道丢失的历史。已有 U+FFFD 与问号提示你检查原文件,并不意味着工具能重建缺失内容。 诊断解码会保留开头的 U+FEFF,不会悄悄删除。转义预览避免双向文本和控制字符改变周围显示。手动选择并审阅后,复制或下载得到包含这些保留字符的 UTF-8 候选本身;用于其他应用之前应再次检查。

相关工具