我在记事本中编辑了以下批处理文件。记事本的右下角显示“UTF8”。我将文件保存为 ANSI 格式。
现在,记事本的右下角显示“ANSI”。我关闭文件并重新打开。记事本在右下角显示“UTF8”。我重复了上述过程几次,每次都得到相同的结果。
它是 ANSI 文件还是 UTF8 文件?
或者记事本右下角显示的内容没有任何意义?
这是在 Windows 11 Pro 23H2 上构建的 22631.3296 Windows Feature Experience Pack 1000.22687.1000.0。Windows Notepad 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
答案1
它是 ANSI 文件还是 UTF8 文件?
两个都
如果它只包含 ASCII 字符,那么它既是 ANSI 又是 UTF-8。
它也适用于大多数其他字符集和编码。这是因为大多数编码都包含使用 ASCII 码点(数字值)的 ASCII 集。
例外是字符编码,例如 IBM 的 EBCDIC - 它曾经非常常见。
顺便说一句,微软过去曾使用 ANSI 一词来指代他们期望美国国家标准协会 (ANSI) 发布的字符集,作为其众多标准之一。ANSI 并没有这样做。更准确或更有用的名称应该是代码页 1252。说您用 ANSI 编写了一个文件,就好像说您用 Pantone 或 RAL 颜色粉刷了您的厨房一样。
Microsoft 应用程序通常会在 UTF-8 文件中写入字节顺序标记 (BOM),以帮助其应用程序识别各种 Unicode 编码,例如 UTF-16LE、UTF-16BE 和 UTF-8。请注意,UTF-8 文件中的 BOM 仅用于识别文件内容编码,它不能指示字节顺序,因为这不适用于 UTF-8。文本文件中的 BOM 可能会导致问题,例如,由于 BOM 取代了脚本可执行签名,导致 Linux shell 脚本无法运行#!
。
Microsoft 应用程序使用库函数来猜测根据文件内容判断文件编码。这种方法非常不可靠,尽管随着时间的推移,这种方法已经有所改进。
有关的
答案2
我认为这并不重要。仅包含英文文本的文件通常是 ASCII,因此 (未标记的) UTF-8 和 ASCII/ANSI 之间没有区别。
如果要强制将文件设置为 UTF-8,则需要将其保存为带 BOM 的 UTF-8。如果没有 BOM(“字节顺序标记”,文件开头的特殊标记),编辑器必须进行猜测,而当文件中没有特殊字符(例如非英语变音符号,如 ä、ö 或 ê)时,这无关紧要,因为所有常用字符表的前 128 个字母都是相等的。
答案3
记事本上显示的 UTF-8 是假的。我曾用 ANSI 和 UTF-8 保存过一个文本文件,两个文件完全相同。
看来记事本的 UTF-8 实现严重缺乏一致性。以 UTF-8 格式保存应该添加 字节顺序标记 (BOM) 到文件的开头,但它没有这样做。
为了正确处理 ANSI 和 UTF-8 之间的差异(带或不带 BOM),你需要一个更先进的文本编辑器,例如 记事本++。