乱码还原·解读工具|还原 縺·繧·ã·‚ƒ,邮件主题·%E3·CSV 的编码转换

粘贴乱码后,工具会穷举 UTF-8·Shift_JIS·EUC-JP·Latin-1 的所有组合,查出是哪种组合造成的乱码,并还原成可读的日语。用 Shift_JIS 打开 UTF-8 时出现的“�”所缺失的字符,也会根据编码规则推测补全,还可以选择其他候选。对乱码了两次的文字,以及 ESC 丢失的 JIS 邮件($B…(B)也同样适用。邮件主题的 =?UTF-8?B?…?=·=?ISO-2022-JP?B?…?=、URL 的 %E3%81%82、JSON 的 \u3042、git 的 \343\201\202、Python 的 \xe3、HTML 的 あ、Quoted-Printable、日语域名的 xn-- 也都能解读。对于 CSV 等文件,会判定字符编码·BOM·换行符,并可转换为在 Excel 中不乱码的 UTF-8(带 BOM)或 Shift_JIS 后保存。所有处理都在浏览器内完成,文字和文件不会发送到任何地方。

粘贴乱码文字

请把邮件·CSV·网页等中的乱码原样粘贴进来。工具会尝试所有可能的乱码方式,并把读起来像日语的结果依次列出。

插入示例:

ABOUT

关于乱码还原·解读工具|还原 縺·繧·ã·‚ƒ,邮件主题·%E3·CSV 的编码转换

乱码还原·解读工具是把变成乱码的日语还原的工具。乱码是在“把以某种字符编码保存的文字当作另一种字符编码来读取”时产生的。例如,把 UTF-8 的“こんにちは”当作 Shift_JIS 来读会变成“縺薙s縺ォ縺。縺ッ”,当作 Latin-1(Windows-1252)来读会变成“ã“ã‚“ã«ã¡ã¯”,把 Shift_JIS 的文字当作 Latin-1 来读则会变成“‚±‚ñ‚É‚¿‚Í”。本工具会把粘贴的文字按 UTF-8·Shift_JIS·EUC-JP·Latin-1 的所有组合重新读取,并把读起来像自然日语的结果依次列出。把 UTF-8 当作 Shift_JIS 读取时出现的“�”表示丢失了 1~2 个字节,但本工具会根据 UTF-8 的固定形态推算出缺失字节的个数和位置,并推测出可读的日语字符来补全(补全的字符点击后可替换为其他候选)。此外还能解读 ESC 丢失的 JIS 邮件($BJ8;z2=$1(B → 文字化け)、乱码了两次的文字、邮件主题的 =?UTF-8?B?…?= 和 =?ISO-2022-JP?B?…?=、URL 的 %E3%81%82、JSON 的 \u3042、git 的 \343\201\202、Python 的 \xe3\x81\x82、HTML 的 あ、Quoted-Printable,以及日语域名的 xn--。对于 CSV 等文件,会判定字符编码·BOM·换行符,并可转换为在 Excel 中不乱码的 UTF-8(带 BOM)或 Shift_JIS 后保存。

乱码还原·解读工具|还原 縺·繧·ã·‚ƒ,邮件主题·%E3·CSV 的编码转换的使用方法

  1. 1把乱码文字(縺·繧·ã·‚ 等排列的文字)原样粘贴到“修复乱码”输入框中
  2. 2确认显示为“最有可能”的文字。同时会显示是哪种编码组合造成的乱码
  3. 3黄色文字是根据“�”推测补全的字符。如果不对,点击它即可替换为其他候选
  4. 4点击“复制还原后的文字”进行复制
  5. 5像 %E3%81%82 或 =?UTF-8?B?…?= 这样仍是转义形式的文字,请粘贴到“读取转义”中
  6. 6CSV 等文件请在“文件·CSV”中选择,选好保存的字符编码(UTF-8 带 BOM·Shift_JIS)后点击“转换并保存”

适用场景

  • 想读懂满是“縺”“繧”“譁”的邮件或网页文字
  • 想把 WordPress 或数据库里一串“㔓—“é”的文字还原
  • 邮件主题显示为 =?UTF-8?B?… 或 =?ISO-2022-JP?B?… 而无法阅读
  • 想读懂旧邮件中夹在“$B”和“(B”之间的字母数字
  • UTF-8 的 CSV 用 Excel 打开会乱码,想转换为带 BOM 的 UTF-8 或 Shift_JIS
  • 想确认收到的 CSV·文本文件的字符编码和换行符
  • 想把 URL 的 %E6%96%87…、JSON 的 \u3042、日志里的 \xe3\x81 读成日语
  • 想读懂 git status 中显示为 \343\201\202 的日语文件名

使用要点

  • 把乱码文字用“被错误读取时的字符编码”还原成字节序列,再用“本来的字符编码”重新读取,从而复原。字符编码的对应表直接使用您的浏览器自带的字符编码转换(WHATWG Encoding)。
  • “�”(U+FFFD)是读不出来的字节被丢弃的标记。把 UTF-8 当作 Shift_JIS 读取时出现的“�”相当于 1~2 个字节,可以根据前后字节推测补全,但因为是推测,也可能变成别的字符。黄色标示的字符点击后可选择其他候选。
  • 把 Shift_JIS 或 EUC-JP 的文字当作 UTF-8 读取而变成满屏“�”的,或在保存时被替换成“?”的,因为原始数据已不存在,无法还原。请在“文件·CSV”中重新读取原始文件。
  • 如果复制过程中丢失了不可见字符(Latin-1 的控制字符等),该部分也会靠推测补全。粘贴的内容越接近原文,还原越准确。
  • 文件的字符编码按以下顺序判定:BOM、能否作为 UTF-8 正确读取、是否有 ESC(JIS)、用 Shift_JIS 和 EUC-JP 哪个读起来更像日语。只有字母数字的文件很难判定,请查看预览,必要时更改读取所用的字符编码。
  • 以 Shift_JIS 保存时,表情符号和“𠮷”等 Shift_JIS 中没有的字符会变成“?”。哪些字符无法写入,会在保存前显示。
  • 文字和文件只在浏览器内处理,不会发送到服务器。

可以解决这些问题

乱码还原·解读工具|还原 縺·繧·ã·‚ƒ,邮件主题·%E3·CSV 的编码转换可以帮你解决以下问题。

  • 想修复满是 縺 和 繧 的乱码
  • 想还原排满 ã 和 †的乱码
  • 想读懂邮件主题里的 =?UTF-8?B?
  • 想把邮件里的 $B…(B 变成日语
  • 想修复 CSV 用 Excel 打开时的乱码
  • 想知道文件是 UTF-8 还是 Shift_JIS
  • 想把 %E3%81%82 这样的 URL 变成日语
  • 想读懂 git 日语文件名里的 \343

常见问题

满是“縺”“繧”的乱码是什么原因?
原因是以 UTF-8 保存的文字被当作 Shift_JIS 显示了。UTF-8 的平假名是“E3 81 xx”“E3 82 xx”这样的 3 个字节,把其中的“E3 81”“E3 82”当作 Shift_JIS 来读就会变成“縺”“繧”,所以平假名越多的文字,“縺”“繧”排得越多。例如“こんにちは”会变成“縺薙s縺ォ縺。縺ッ”。粘贴到本工具即可还原,变成“�”而缺失的字符也会推测补全。
“㔓—“é”这样的乱码能还原吗?
可以还原。这是把 UTF-8 的文字当作 Latin-1(Windows-1252)显示时的乱码形态,常发生在国外软件,或 WordPress·MySQL 等数据库的字符编码设置不一致时。“こんにちは”会变成“ã“ã‚“ã«ã¡ã¯”这样。连续乱码两次会变得更长,如“ã”,但两次的乱码可以一并还原。
满是“�”或“???”的乱码能还原吗?
大多数情况下无法还原。“�”是读不出来的字节被丢弃的标记,把 Shift_JIS 或 EUC-JP 的文字当作 UTF-8 读取时,大部分字符会变成“�”,原始数据不会保留。“?”是保存时对无法写入的字符的替换标记,所以在保存的那一刻数据就已经没了。如果还留有原始文件或邮件,请在“文件·CSV”中读取,或切换软件的字符编码后重新打开。
为什么用 Excel 打开 CSV 会乱码?
因为日文版 Excel 会把没有 BOM 的 CSV 当作 Shift_JIS 打开。Web 服务和程序导出的 CSV 大多是 UTF-8,直接打开就会乱码。在本工具的“文件·CSV”中转换并保存为“UTF-8(带 BOM)”,双击打开也不会乱码。如果要交给旧软件或内部系统读取,请选择“Shift_JIS”。
邮件主题里的“=?UTF-8?B?…?=”是什么?
这是在邮件头中放入日语的写法(MIME 编码),“?B?”表示用 Base64、“?Q?”表示用 Quoted-Printable 把文字变成编码。邮件客户端不支持时就会原样显示。例如“=?UTF-8?B?44GK6KaL56mN44KC44KK44Gu44GU5L6d6aC8?=”就是“お見積もりのご依頼”(报价请求)。粘贴到“读取转义”中,包括 =?ISO-2022-JP?B?…?= 在内都能还原成日语。
为什么邮件里会出现夹在“$B”和“(B”之间的字母数字?
这是用 JIS(ISO-2022-JP)书写的日语中,作为切换信号的不可见字符 ESC 丢失后的状态。在 JIS 中,从“ESC $ B”到“ESC ( B”之间是日语,所以 ESC 一旦丢失,就只剩下“$BJ8;z2=$1(B”(=文字化け)这样的字母数字。粘贴到本工具,会补上 ESC 并还原成原来的日语。
git 中日语文件名显示为“\343\201\202”这样。
git 默认会把含有非 ASCII 字符的文件名,显示为把 UTF-8 字节写成八进制的形式(\343\201\202 =“あ”)。粘贴到“读取转义”中即可读懂。如果想让它直接显示日语,请执行 git config --global core.quotepath false。