Windows 11 记事本越南文字母显示异常的解决

有一份记事本文档,是从 Windows 10 复制到 Windows 11 的,编码为 UTF-8-BOM,其中包含中文、日文假名、越南文、数字,以及下划线等符号。昨天突然发现在 Windows 11 中用记事本打开时越南文中特有的字母,比如 ệ,显示成了一个方框(如下图,Xuất phát 的 ấ 显示异常),但是用 Notepad++ 等其他编辑器打开都能正常显示。

通过咨询 ChatGPT,最初以为是字体缺失和编码不正确等原因,但是都被否定了。继续给 ChatGPT 提供线索,最终通过以下信息确认了问题所在:

1. 在 Windows 11 中新建记事本,手动输入越南文(例如:”Thắng lợi”)。打开 Windows 10 拷贝过来的文件,复制里面“显示异常”的同一个词,显示竟然是正常的。

2. 把有问题的文件的全部内容追加到刚才在 Windows 11 新建的显示正常的文件末尾,原来正常的部分你还是正常,而追加的部分显示异常。

100% 可以确认,有问题的文件里,某一行或开头残留了某种控制字符或格式标记,影响了记事本的渲染环境(可能是段落方向、文字范围、字体回退机制等),一旦追加进另一个文件,就从追加位置开始影响下去。

简单来说,这个问题不是某些字母不能显示,而是“有一段看不见的脏东西躲在文件中一开始,或者某一段文本块的某行开头,把整个 Windows 11 记事本的显示逻辑污染掉了”。

可能的元凶字符包括:

控制字符名称 Unicode码点 说明
BOM (重复或中间插入) U+FEFF 不该在正文中出现,可能存在错误
LRM / RLM U+200E / U+200F 控制左右文字方向的隐形字符
Line Separator U+2028 非标准换行符
Object Replacement U+FFFC 隐藏嵌入对象/损坏字符
Embedded Font Tag 私有机制 某些程序嵌入了字体标识(已知 Windws 10 某些 OEM 软件做过)

精准解决思路:使用 Python 清理原始文件的“隐形污染字符”

Python 代码:

import unicodedata
import re

with open("原始有问题的文件.txt", "r", encoding="utf-8") as f:
    content = f.read()

# 将所有字符归一化为标准 NFC 形式(合并组合字符)
content = unicodedata.normalize("NFC", content)

# 移除常见污染控制字符(包括 BOM 重复、方向标志等)
cleaned = re.sub(r'[\u200B-\u200F\u2028-\u202F\uFEFF\uFFF9-\uFFFC]', '', content)

with open("修复后.txt", "w", encoding="utf-8") as f:
    f.write(cleaned)

print("文件已清理并保存为 UTF-8 无 BOM")

这个脚本会做三件事:
1. 把所有分解的字符组合成标准字母(越南语中的组合字母会统一)
2. 删除所有看不见的“污染控制符”
3. 输出干净的 UTF-8 文本文件

 

欢迎分享或转载,转载请注明出处。

本文固定链接:https://www.oixxu.com/windows-11-vietnamese-letter-error-solved

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注