我在记事本中编辑了以下批处理文件。记事本右下角显示“UTF8”。我将文件保存为 ANSI 格式。
现在,记事本右下角显示“ANSI”。我关闭了文件并重新打开它。记事本右下角显示“UTF8”。我已经多次重复上述过程,每次都得到相同的结果。
它是 ANSI 文件还是 UTF8 文件?
或者记事本右下角显示的内容可能没有任何意义?
这是在 Windows 11 Pro 23H2 上构建的 22631.3296 Windows 功能体验包 1000.22687.1000.0。Windows 记事本 11.2401.26.0
[对不起!忘记添加文件】
date /t >C:\health.txt
time /t >>c:\health.txt
sfc /scannow >>c:\health.txt
time /t >>c:\health.txt
sfc /scannow >>c:\health.txt
time /t >>c:\health.txt
我怀疑这并不重要。仅包含英文文本的文件通常是 ASCII,然后(未标记的)UTF-8 和 ASCII/ANSI 之间没有区别。
如果要强制文件为UTF-8,则需要将其保存为带BOM的UTF-8。如果没有 BOM(“字节顺序标记”,文件开头的特殊标记),编辑器必须猜测,并且当文件中没有特殊字符时(例如非英语变音符号,如 ä、ö或 ê) 这并不重要,因为所有常用字符表的前 128 个字母都是相等的。
两个都
如果它只包含 ASCII 字符,那么它既是 ANSI 又是 UTF-8。
它也是大多数其他字符集和编码。这是因为大多数编码都包含使用 ASCII 代码点(数字值)的 ASCII 集。
例外的是字符编码,例如 IBM 的 EBCDIC - 这曾经很常见。
顺便说一句,微软历史上使用术语 ANSI 来指代他们期望美国国家标准协会 (ANSI) 作为其众多标准之一发布的字符集。ANSI 没有这样做。更准确或更有用的名称是Code Page 1252。说您用 ANSI 编写文件有点像说您用 Pantone 或 RAL 颜色粉刷厨房。
Microsoft 应用程序通常使用字节顺序标记 (BOM) 编写 UTF-8 文件,以帮助其应用程序识别各种 Unicode 编码,例如 UTF-16LE、UTF-16BE 和 UTF-8。然而,这违反了 Unicode 联盟指南,该指南规定 UTF-8 文件不应具有字节顺序标记(因为 UTF-8 只有一种可能的字节顺序)
Microsoft 应用程序使用库函数根据文件内容猜测文件的编码。这是出了名的不可靠,尽管它随着时间的推移有所改进。
有关的
这个记事本显示的 UTF-8 是假的。我以 ANSI 和 UTF-8 格式保存了一个文本文件,这两个文件完全相同。
看来记事本的UTF-8实现严重缺乏一致性。以 UTF-8 格式保存应该 在文件开头添加字节顺序标记 (BOM) ,但它没有这样做。
为了正确处理 ANSI 和 UTF-8(带或不带 BOM)之间的差异,您需要一个更先进的文本编辑器,例如 notepad++。