UTF-8 против UTF-8 с спецификацией

В последней версии Notepad.exe есть функция Сохранить как UTF-8 и UTF-8 with BOM.

Является UTF-8 with BOM Старый UTF? Что такое UTF-8 в настоящее время?

2 ответа

UTF-8 - это UTF-8 независимо от того, существует ли спецификация.

Сохранение файла со спецификацией (меткой порядка байтов) для UTF-8 не требуется.

Тот факт, что Блокнот позволяет сохранять файлы в "UTF-8" или "UTF-8 со спецификацией", кажется, является опцией, которая существует для обеспечения гибкости в случаях, когда требуется спецификация (отметка порядка байтов). Но в целом просто сохранение файла без спецификации - что означает простой UTF-8 - действительно лучший способ обработки текстовых файлов с содержимым UTF-8.

Как объяснено на странице Википедии для отметки порядка байтов:

"Использование спецификации не является обязательным. Его присутствие мешает использованию UTF-8 программным обеспечением, которое не ожидает байтов, отличных от ASCII, в начале файла, но которое в противном случае могло бы обрабатывать текстовый поток ".

И статья углубляется в это, заявляя следующее; жирный акцент мой:

"Представление спецификации UTF-8 - это (шестнадцатеричная) последовательность байтов. 0xEF,0xBB,0xBF.

Стандарт Unicode разрешает спецификацию в UTF-8, но не требует и не рекомендует ее использование. Порядок байтов не имеет значения в UTF-8, поэтому его единственное использование в UTF-8 - это сигнализировать в начале, что текстовый поток закодирован в UTF-8 или что он был преобразован в UTF-8 из потока, содержащего необязательная спецификация. Стандарт также не рекомендует удалять спецификацию, когда она есть, чтобы при циклическом переключении между кодировками информация не терялась, и чтобы код, который на нее полагается, продолжал работать. IETF рекомендует, чтобы если протокол либо (а) всегда использует UTF-8, либо (б) имеет другой способ указать, какая кодировка используется, то ему "СЛЕДУЕТ запретить использование U+FEFF в качестве подписи".

Отсутствие спецификации позволяет обеспечить обратную совместимость текста с некоторым программным обеспечением, не поддерживающим Unicode. Примеры включают языки программирования, которые разрешают байты, отличные от ASCII, в строковых литералах, но не в начале файла ".

Что касается того, почему Microsoft заботится о сохранении UTF-8 с BOM в Блокноте? Это хорошо объясняет; кажется, это особое требование к инструментам программирования Microsoft, а не к любому другому инструменту стороннего производителя:

"Компиляторы и интерпретаторы Microsoft, а также многие компоненты программного обеспечения в Microsoft Windows, такие как Notepad, рассматривают BOM как необходимое магическое число, а не используют эвристику. Эти инструменты добавляют спецификацию при сохранении текста как UTF-8 и не могут интерпретировать UTF-8, если только спецификация не присутствует или файл не содержит только ASCII. Google Docs также добавляет спецификацию при преобразовании документа в простой текстовый файл для загрузки ".

Поэтому, если вам явно не нужно сохранять файл UTF-8 со спецификацией, которая будет установлена ​​для файла, просто не беспокойтесь об этой опции сохранения.

Другой ответ неверен. Это какая-то политическая вещь. ANSI - это текстовый формат по умолчанию в Windows, который существует уже 36 лет.

В Windows файлы считаются файлами ANSI. Поэтому вы всегда используете спецификацию. Программы Unix, которые не могут обрабатывать спецификации, не совместимы с Unicode.

Пишу текстовые редакторы. Если пользователь не указывает, это ANSI - ВСЕГДА.

Предполагая, что вы получите Unicode без спецификации, вам нужно позвонить по https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-istextunicode, чтобы угадать формат. Вряд ли правильное программирование.

Другие вопросы по тегам