Files
aiagent/学习/乱码问题修复记录.md

2.7 KiB
Raw Permalink Blame History

乱码问题修复记录

修复日期:2026-05-17

现象

D:\aaa\aiagent\学习\ 目录下部分 .md 文件在 Windows 记事本等编辑器中打开时,中文显示为乱码。

原因

这些文件是 UTF-8 编码,但缺少 BOM(Byte Order Mark,字节序标记)。

UTF-8 文件有无 BOM 的区别:

类型 文件头 Windows 记事本识别
UTF-8 with BOM EF BB BF 开头 正确识别为 UTF-8
UTF-8 without BOM 直接是文本内容 误判为 ANSI(中文 Windows 为 GBK),中文变乱码

在中文 Windows 系统中,记事本默认用 ANSI(GBK)编码打开无 BOM 的文件,导致 UTF-8 编码的中文被当作 GBK 解码,显示为乱码。VS Code 等现代编辑器能自动检测编码所以不受影响。

受影响文件(17 个)

阶段①-Linux基础-全课复习.md
阶段①-Linux基础-第4课-Shell脚本编程基础.md
阶段①-Linux基础-第4课-init.rc启动脚本解析.md
阶段①-Linux基础-第5课-AOSP构建系统入门.md
阶段①-Linux基础-第5课-Makefile与Soong构建系统入门.md
阶段①-Linux基础-第5课-Shell脚本编程实战.md
阶段①-Linux基础-第6课-Shell脚本编程实战.md
阶段①-Linux基础-第7课-Linux进程管理与网络基础.md
阶段①-Linux基础-综合复习宝典.md
阶段①-Linux基础-综合复习练习题.md
阶段②-C语言-第1课-C语言基础回顾与AOSP视角.md
阶段②-C语言-第2课-函数与指针入门.md
阶段②-C语言-第2课-函数与指针入门(AOSP视角).md
阶段②-C语言-第3课-指针进阶与内存管理.md
阶段②-C语言-第4课-字符串处理与文件IO-AOSP视角.md
阶段②-C语言-第5课-C语言基础与AOSP底层开发入门.md
阶段②-C语言编程-第3课-指针深入与字符串安全处理(AOSP视角).md

修复方式

使用 Python 给所有缺少 BOM 的文件添加 UTF-8 BOM 标记:

import os

for fn in os.listdir('.'):
    if not fn.endswith('.md'):
        continue
    with open(fn, 'rb') as f:
        data = f.read()
    if data[:3] == b'\xef\xbb\xbf':
        continue  # 已有 BOM,跳过
    text = data.decode('utf-8')
    with open(fn, 'w', encoding='utf-8-sig', newline='') as f:
        f.write(text)

utf-8-sig 是 Python 的编码别名,等同于 UTF-8 with BOM,写入时自动在文件头部添加 EF BB BF。

修复结果

  • 修复前:23 个文件中,6 个有 BOM,17 个无 BOM
  • 修复后:23 个文件全部有 BOM,内容无损,在 Windows 任何编辑器中均可正常显示中文

预防建议

在 Windows 环境下创建含中文的文本文件时,建议统一使用 UTF-8 with BOM 编码保存,避免编码误判。