четверг, 9 декабря 2010 г.

Регулярный мусор в тексте может быть неверной кодовой страницей

Это перевод Consistent garbage text can be incorrect encoding identification (or detection). Автор: Майкл Каплан.

Mushy спросил в Suggestion Box:
Майкл,

Быть может у тебя есть старый пост, который объясняет следующую ситуацию. Если да - то ткни меня в него. Вот в чём проблема. Если ты посмотришь на мой блог, то увидишь как некоторые символы кавычек показываются как ’ вместо ". Когда я сначала публикую материал, их там нет. Как от них избавиться? Вызвано ли это использованием форматов Word, .doc, .txt, .rtf? Что лучше подходит?

P.S. Мне понравился твой блог и я занёс его в закладки.

Thanks,
Mushy
(Для тех, кто заинтересовался, блог Mushy - это Cross+Hairs)

Некоторые люди могут быть знакомы с байтовыми последовательностями; если вы с ними знакомы, то вы - гик :-)

Но чтобы увидеть, что происходит, давайте сначала рассмотрим поведение автоопределения кодировки Блокнота Microsoft:
  • Если у вас есть BOM UTF-16 LE, то это UTF-16 LE.
  • Если у вас есть BOM UTF-16 BE, то это UTF-16 BE.
  • Если у вас есть BOM UTF-8, то это UTF-8.
  • Если текст согласуется со старым определением RFC2279, то предполагается, что это UTF-8.
  • В противном случае текст полагается в кодовой странице системы по умолчанию (CP_ACP).
Итак, вооружённые этим знанием, давайте попробуем следующее:
  • Создадим в Блокноте новый текстовый файл
  • Добавим в него такую строку: ’
  • Сохраним файл и закроем
  • Откроем файл
Вы обнаружите, что вы сохранили последовательность байтов $E2 $80 $99, что выглядит следующим образом в кодовой странице 1252 (и в оригинальном файле):

’

и это было проинтерпретировано Блокнотом после открытия как:

в UTF-8 - потому что последовательность $E2 $80 $99 - это то, как выглядит U+2019 (RIGHT SINGLE QUOTATION MARK) в потоке данных UTF-8.

Если web-страница показывает такие последовательности, то обычно это вызвано неверным мета-тэгом charset на странице, неверным информационным заголовком от сервера, неверным определением кодовой странице на клиенте или какой-то комбинацией этих проблем...

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

This post brought to you by   (U+2019, a.k.a. RIGHT SINGLE QUOTATION MARK)

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.