
Я отредактировал следующий пакетный файл в блокноте. В правом нижнем углу блокнота было указано "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
решение1
Это файл ANSI или файл UTF8?
Оба
Если он содержит только символы ASCII, то он относится как к ANSI, так и к UTF-8.
Это также большинство других наборов символов и кодировок. Это потому, что большинство кодировок включают набор ASCII, используя кодовые точки ASCII (числовые значения).
Исключением являются такие кодировки символов, как EBCDIC компании IBM, которая когда-то была очень распространена.
Кстати, Microsoft исторически использовала термин ANSI для обозначения набора символов, который, как они ожидали, Американский национальный институт стандартов (ANSI) опубликует в качестве одного из своих многочисленных стандартов. ANSI этого не сделал. Более точным или полезным названием было быКод страницы 1252. Сказать, что вы написали файл в формате ANSI, это то же самое, что сказать, что вы покрасили кухню в цвет Pantone или RAL.
Приложения Microsoft обычно записывают файлы UTF-8 с меткой порядка байтов (BOM), которая помогает их приложениям распознавать различные кодировки Unicode, такие как UTF-16LE, UTF-16BE и UTF-8. Обратите внимание, что BOM в файле UTF-8 служит только для идентификации кодировки содержимого файла, он не может указывать порядок байтов, поскольку это неприменимо к UTF-8. Наличие BOM в текстовом файле может вызвать проблемы, например, помешать работе скриптов оболочки Linux, поскольку BOM смещает сигнатуру исполняемого файла скрипта #!
.
Приложения Microsoft используют библиотечные функции дляпредполагатькодировка файла по его содержимому. Это, как известно, ненадежно, хотя со временем это улучшилось.
Связанный
решение2
Подозреваю, что это не имеет значения. Файл, содержащий только английский текст, часто является ASCII, и тогда просто нет никакой разницы между (неотмеченным) UTF-8 и ASCII/ANSI.
Если вы хотите принудительно сохранить файл в кодировке UTF-8, вам нужно сохранить его как UTF-8 с BOM. Если BOM ("Byte Order Mark", специальный маркер в начале файла) отсутствует, редактору приходится угадывать, а когда в файле нет специальных символов (например, неанглийских диакритических знаков, таких как ä, ö или ê), это просто не имеет значения, так как первые 128 букв всех общих таблиц символов равны.
решение3
Это указание блокнота на UTF-8 является поддельным. Я сохранил текстовый файл в ANSI и UTF-8, и оба файла были полностью идентичны.
Похоже, что реализация блокнота UTF-8 серьезно страдает от недостатка последовательности. Сохранение в формате UTF-8 должно было добавить метка порядка байтов (BOM) в начало файла, чего он не делает.
Чтобы правильно обрабатывать разницу между ANSI и UTF-8 (с BOM или без него), вам понадобится более продвинутый текстовый редактор, например блокнот++.