记事本显示TXT文件异常Unicode字符问题求助
记事本显示异常的原因解析
核心问题:UTF-16LE编码缺失BOM
Windows记事本对文本文件编码的识别高度依赖字节顺序标记(BOM):
- 你的文件实际是UTF-16LE编码,但没有添加BOM头。记事本会默认把无BOM的双字节文件当作系统默认ANSI编码(如GBK)解析,将UTF-16的双字节字符拆成单个ANSI字符,导致显示出异常Unicode符号。
- WSL的
cat命令不依赖BOM,它直接按字节流读取,且WSL终端默认字符编码多为UTF-8,能正确解析UTF-16LE格式的内容,所以显示正常。
为何另存为UTF-8/ANSI会自动转回UTF-16?
记事本的“另存为”功能会自动检测文件的编码特征:
- 当它识别到文件是双字节编码模式(UTF-16的典型特征),会强制按UTF-16编码重新保存,直接覆盖你选择的UTF-8或ANSI选项,导致编码无法更改。
十六进制转储对应特征验证
如果你的文件十六进制内容是类似以下格式(以p225为例):
70 00 32 00 32 00 35 00
这就是UTF-16LE编码的典型表现:每个ASCII字符对应两个字节(高位补0)。记事本把70 00拆成p(ANSI的0x70)和一个不可见控制字符(0x00),所以显示异常;而WSL终端会将其作为UTF-16LE的p解析,显示正常。
快速解决办法
- 用VS Code等第三方编辑器打开,手动指定编码为UTF-16LE,再重新保存为带BOM的UTF-16或直接转存为UTF-8。
- 在WSL中执行编码转换命令:
iconv -f UTF-16LE -t UTF-8 voice_list.txt > voice_list_utf8.txt,转换后记事本即可正常打开。
内容的提问来源于stack exchange,提问作者Chetan Sharma0402
相关产品推荐
相关产品推荐

