它是 ANSI 还是 UTF8 文件?

它是 ANSI 还是 UTF8 文件?

我在记事本中编辑了以下批处理文件。记事本的右下角显示“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),你需要一个更先进的文本编辑器,例如 记事本++

相关内容