2010-05-29 2 views
1

Итак, я получил сайт, который использует ISO-8859-1 кодировку, и я не могу это изменить. Я хочу быть уверенным, что контент, который я вхожу в веб-приложение на сайте, правильно разбирается. Парсер работает по характеру по характеру. Я также не могу изменить парсер, я просто пишу файлы для его обработки. Содержимое в моем файле, о котором я рассказываю приложению после разбора, содержит символы Unicode (или, по крайней мере, я предполагаю это, даже если они были созданы с помощью кодов Windows Alt, сопоставленных с CP437). Использование сущностей не является опцией из-за характера символьного действия анализатора. Единственными символами, которые синтаксический анализатор выходит на выходе, являются чувствительные к разметке, такие как амперсанды, меньше или больше символов. Я бы просто пошел вперед и посмотрел, как это выглядит, но вывод можно увидеть только в публикации, которая должна провести пару дней, чтобы получить одобрение, и это потребует слишком много для всего теста ,Если я использую Unicode на сайте ISO-8859-1, как это будет интерпретироваться браузером?

Итак, длинный рассказ, если я сказал сайту вывести ▼ ÇÑ ¥ ☺☻ на сайт с метатегом, в котором говорится, что он должен использовать ISO-8859-1, браузер автоматически определит Unicode и отобразить его или буквально перевести его как ISO-8859-1 и получить другой набор символов?

ОБНОВЛЕНИЕ: Я сделал временный тестовый сайт по адресу http://doorstop.csh.rit.edu/home/testing, где я сделал тестовый файл в Notepad ++, используя UTF-8 без спецификации, но использовал метатег, который устанавливает кодировку в ISO-8859-1.

ответ

2

Если вы посылаете UTF-8 на что-то сказали ожидать ISO-8859-1, то да, вы будете получать Mojibake :(

Рассмотрим, что UTF-8 последовательность вводится просто с 8-битным полукокса с высоким бит набор (т.е. символьное значение> 127). Как-то ожидает простую 8 битная кодировка символов собираются решить, что конкретная последовательность должна быть истолкована как UTF-8, а не кодирование рассказывалось использовать?

+0

Потому что вы можете якобы определить допустимую строку байтов utf-8 и иметь вероятность того, что она фактически должна быть закодирована в ISO-8859-1, так как сайт говорит очень очень низко. Перейдите на http://en.wikipedia.org/wiki/UTF-8#Advantages и посмотрите источники цитат # 19 и # 20. Я просто подумал, что браузеры часто визуализируют html на основе контекста контента, а не истинной спецификации HTML, будет ли браузер отображать UTF-8 в случае вероятного контекста UTF-8, хотя он по спецификации HTML должен использовать ISO-8859 -1? –

+0

@ grg-n-sox: Большинство браузеров следуют стандартам, давая mojibake.Но, по-видимому, IE привык угадывать кодировку, игнорируя то, что говорит сервер. –

1

Единственные символы, которые синтаксический анализатор выходит на выходе, являются чувствительными к разметке, такими как амперсанд, меньше и больше, чем sy mbols.

Все, что находится за пределами ISO-8859-1, может вызвать проблемы. HTML, закодированный как ISO-8859-1, может отображать символ типа & # x25bc; & # x263a; & # x263b ;, но только путем экранирования их как ▼☺☻. В противном случае они просто находятся вне диапазона кодирования.

Символы & # x00c7; & # x00d1; & # x00a5; поддерживаются ISO-8859-1 и не должны вызывать проблемы в правильно реализованной системе.

Может ли парсер использоваться для правильного анализа файла до его отображения, зависит от его реализации и того, соответствуют ли он и его веб-контейнеры любым метаданным кодирования, которые вы могли бы отправить.

Юникод - это набор символов, поддерживаемый несколькими кодировками. Например, U + 263a & # x263a; кодируется как UTF-8, становится байтами e2 98 ba, которые будут декодироваться как & # x00e2; ˜ º, если он рассматривается как ISO-8859-1.