Что делает файл UTF-8? - PullRequest
       1

Что делает файл UTF-8?

0 голосов
/ 29 сентября 2018

Я читал, что добавление метки порядка байтов UTF-8 (3 символа) в начале текстового файла делает его файлом UTF-8, но я также читал, что Юникод не рекомендует использовать спецификацию для UTF-8.

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

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

Открытие файлав Textpad32 показывает 3 символа в начале файла.

Так, что делает файл UTF-8?

Ответы [ 3 ]

0 голосов
/ 29 сентября 2018

UTF-8 - это особая кодировка.Все 7-битные ASCII-файлы также являются допустимыми UTF-8, и он также может кодировать каждый символ Unicode.

Часто вы получите совет сохранить как UTF-8 без спецификации.На практике очень маловероятно, чтобы файл в устаревшей кодировке (такой как кодовая страница 1252, Big5 или Shift-JIS) просто выглядел как действительный UTF-8, если это не намеренно неоднозначный контрольный пример.Многие программы, такие как веб-браузеры, хорошо знают, когда файл имеет формат UTF-8.Самое последнее программное обеспечение использует UTF-8 в качестве предпочтительной кодировки текста, если только оно не вынуждено использовать по умолчанию что-то другое для совместимости с прошлым веком.(Например, LaTeX изменил исходную кодировку по умолчанию на UTF-8 в апреле 2018 года, и движки LuaLaTeX и XeLaTeX делали то же самое годами.)

Есть некоторые типы документов со специальными требованиями.Например, кодировка веб-страниц по умолчанию теоретически - Windows 1252, хотя браузеры в реальном мире примут их лучшее предположение.В настоящее время наилучшей практикой в ​​Интернете является сохранение в формате UTF-8 без спецификации.Вместо этого вы пишете внутри <head> документа, <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> или <meta charset="utf-8"/>. Это явно сообщает агенту пользователя, что такое кодировка символов.

С другой стороны, некоторые старые версии программного обеспечения ломаются.если они видят спецификацию или только распознают UTF-8, если есть спецификация.Microsoft в этом была особенно виновата, ее программное обеспечение не хочет ломать какие-либо файлы, которые раньше работали, и поэтому по сей день я сохраняю свои исходные файлы C как UTF-8 с BOM.Это единственный формат, который работает только на каждом компиляторе, который я использую: даже последняя версия MSVC может ошибиться, если вы не укажете ни BOM, ни правильный флаг командной строки, тогда как Clang поддерживает только UTF-8 и имеетнет возможности читать файлы в любой другой кодировке.Некоторые старые версии MSVC, которые мне когда-то пришлось использовать, вообще не могут понять UTF-8, если не существует спецификации, и не предоставляют никакого способа переопределить ее автоопределение.

0 голосов
/ 29 сентября 2018

Файл не нуждается в явном указателе того, что это UTF-8, современные текстовые редакторы должны обнаруживать кодировку UTF-8 из контекста, поскольку последовательности UTF-8 довольно различны.

Кроме того, как выPHP не любит заголовок спецификации, это глупая вещь, которая часто путается с выводом скрипта и создает больше проблем, чем решает.

У HTML есть свой собственный способ объявления кодировкифайл, вы можете сделать это в самом HTML:

<head>
    <meta charset="UTF-8">
</head>

Или объявить кодировку в заголовках HTTP, здесь с PHP:

header('Content-Type: text/html; charset=utf-8');

Современные браузеры также предполагают UTF-8в качестве кодировки по умолчанию, если не указано иное.В конце концов, это стандарт Интернета.

0 голосов
/ 29 сентября 2018

Текст - это UTF-8, потому что он действителен как UTF-8, и автор решает, что это так.

Как это решение автора сообщается потребителю, это другой вопрос, который включает в себя соглашение, догадки,и различные схемы для внутриполосной или внеполосной сигнализации, такие как кодировка HTTP или HTML, BOM (которая улучшает угадывание), некоторый формат конверта / встраивания, дополнительные потоки данных, именование файлов и многое другое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...