Объекты Unicode, отображаемые как CP1252
Я решил написать себе небольшой скрипт для справки по Юникоду, так как мой любимый онлайновый поисковый сайт по Юникоду стал глючным и полным рекламы. До сих пор это был приятный проект. Однако я заметил, что некоторые символы отображаются неправильно.
Например, кодовая точка Ux8E должна быть управляющим символом с именем "SINGLE SHIFT TWO" - и фактически это имя, которое отображается, но сам символ отображается как Ž - это символ, который должен быть в Ux17D, "LATIN CAPITAL LETTER Z" С КЕРОНОМ ". Это также символ CP1252 на x8E, так что это должно быть ключом к путанице.
Почему мой браузер генерирует и отображает символ в кодировке CP1252 и как его остановить? В настоящее время скрипт выполняется локально на моем Mac - это JavaScript, в основном jQuery, в HTML 5: сами символы обозначаются, например, как & &x8e; и вставляется с помощью jQuery append(). Сам сценарий кодируется в UTF-8, а HTML-код определяет UTF-8 в мета. Это проблема с Apache? Проблема с ОС? Я не проводил тщательного тестирования браузеров, но в Safari, Firefox, Opera и Chrome то же самое, так что, думаю, это не так.
Я мог бы просто удалить все управляющие символы, так как они все равно не должны отображаться. В настоящее время я подгоняю имена символов на странице из файла XML, содержащего информацию обо всех символах Юникода, поэтому, пока я делаю это, я могу проверить, является ли символ управляющим символом, и удалить его соответствующим образом. Но XML огромен, а Ajax достаточно медленный, чтобы запутать его в качестве краткого справочника, поэтому я действительно хотел бы найти способ просто заставить свой компьютер не показывать мне мусор.
Есть идеи?
1 ответ
Это обходной путь с ошибочным сайтом.
Например: пуля •
(U+2022) кодируется как байт 0x95 в нескольких однобайтовых наборах символов, таких как Windows-1252. Как следствие, некоторые люди добавили бы пулю на свою веб-страницу, написав •
, Который предположительно использовался, если этот браузер использовал ту же кодировку.
Обычно •
действительно кодирует управляющий символ. Но поскольку эти управляющие символы обычно не используются на веб-страницах, даже современные браузеры предполагают, что эта сущность ссылается на закодированное значение в windows-1252 и отображает маркер. (правильный числовой объект для маркера •
)
В эти дни вы обычно указываете кодировку своей страницы (часто utf-8) и просто буквально пишете символ маркера на странице HTML.
Это также способ остановить это поведение. Просто используйте символы (например, используя $element.text("•")
) и не используйте числовые объекты.