中文变成问号:? 和 � 分别是什么意思

汉字的位置显示成 ? 或 �?这两种看起来很像,原因却不同。很多时候文件本身完全没问题,有时文字已经丢失了。下面教你判断是哪一种情况。

支持文本和以下文件:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

例如 Excel 导出、数据库备份、字幕或网站代码。

修复

  1. 拖入文件或粘贴文本
  2. 自动修复
  3. 复制或下载
或把文件拖到这里
  • 无需上传。 文件直接在浏览器中修复,不会离开你的设备。

  • 服务器位于欧盟。 Mojibuster 运行在 芬兰(欧盟)的服务器上,受《通用数据保护条例》(GDPR)约束。 GDPR 全文(EUR-Lex,英文)

情况一:显示 �,但文件其实没问题

如果记事本、播放器或浏览器里满屏都是 �,通常是文件用 GBK(GB2312、GB18030,也就是中文 Windows 的 ANSI)保存,却被当成 UTF-8 读取。汉字的字节在 UTF-8 中无效,软件只是在显示时换成了替换字符 �。文件里的字节其实还是对的。

解决方法: 把原始文件拖到上面的框中。Mojibuster 读取时会识别编码,并把文件转换成 UTF-8。注意:一定要用原始文件,不要从软件里复制文字,复制后 � 就真的固定下来了。详见 GBK 转 UTF-8。

情况二:? 或 � 已经保存在文本里

如果软件已经把带替换字符的文本保存或传给了别的系统,原来的汉字就丢失了。? 也是一样:当目标编码里没有这个字符时,软件就会写入 ?。例如保存为 ASCII,或者写入不支持中文的数据库字段时,每个汉字都会变成 ?。

这种情况无法反推,因为所有汉字都变成了同一个符号。Mojibuster 不会乱猜,而是告诉你有多少处受影响。只能从源头解决:重新导出,或者使用备份。

中文变成问号的常见原因

  • 数据库: 字段或连接用的是 latin1 或 ascii,而数据是 UTF-8。MySQL 会把无法存储的汉字换成 ?,参见 MySQL 和 phpMyAdmin。
  • PowerShell 5.1: Export-Csv 默认以 ASCII 写入,汉字会变成 ?,参见 PowerShell。
  • Python: encode('ascii', errors='replace') 会悄悄把字符换成 ?,参见 Python 和 pandas。
  • 记事本另存为 ANSI: 中文 Windows 的 ANSI 就是 GBK。表情符号、部分生僻字或其他语言的文字 GBK 里没有,保存后会变成 ?。
  • 命令行窗口: Windows 控制台遇到当前代码页(如 936)不支持的字符时显示为 ?。通常只是显示有问题,文件本身没坏。

如何判断是哪种情况

  1. 用能显示编码的编辑器打开文件,例如 Notepad++。如果状态栏显示“ANSI”或“GB2312”,就是情况一。
  2. 把文件拖到 Mojibuster 中。如果结果显示按 GBK 读取,汉字也恢复了,那就是情况一,参见 GBK 转 UTF-8。
  3. 如果 Mojibuster 提示有字符丢失,就是情况二,只能重新导出。

如果看到的不是问号,而是 濮撳悕 这样的生僻字,那是另一种错误,几乎都能修复:乱码是什么。

常见问题

Mojibuster 能把 ? 变回汉字吗?

不能。一个 ? 可能代表任何字,信息已经没有了。Mojibuster 不会改动这些地方,但会告诉你有多少处。

为什么一个软件显示 �,另一个软件却正常?

说明文件没问题,只是其中一个软件用错了编码读取。用 Mojibuster 转成 UTF-8 后,两个软件都能正常显示。

� 是什么字符?

它是替换字符 U+FFFD。软件无法把某个字节读成字符时就会显示它。它表示编码出了错,并不是原文的一部分。

更多指南