Как устранить проблемы с кодировкой символов?
-
09-06-2019 - |
Вопрос
Если все, что вы видите, — это уродливые поля без символов, какие инструменты или стратегии вы используете, чтобы выяснить, что пошло не так?
(Конкретный сценарий, с которым я сталкиваюсь, - это поля без символов внутри <select>, когда он должен отображать японские символы.)
Решение
Во-первых, «уродливые поля без символов» могут быть не проблемой кодировки, а просто признаком того, что у вас не установлен шрифт, который может отображать глифы на странице.
Большинство проблем с кодировкой символов возникает при передаче строк из одной системы в другую.В случае веб-приложений это обычно происходит между браузером и приложением, между приложением и файловой системой, а также между приложением и базой данных.
Поэтому вам необходимо проверить, откуда берутся неправильно закодированные данные, какую кодировку символов они имеют в источнике и в какой кодировке они принимаются.Лучший способ — отправить персонажей, с которыми, как вы знаете, у системы есть проблемы, и проверить их на каждом уровне приложения.Как они выглядят внутри приложения?В базе данных?Когда вы вернете их из базы данных?Когда они отображаются в браузере?
Извините за такой общий подход, но этот вопрос не дает многого для работы.
Другие советы
Если данные, которые вы отправляете в браузер, будут искажены (модзи-запекание), вы получите мусорные символы.Кроме того, если вы укажете неправильный набор символов в своих мета-заголовках, ваш браузер будет неправильно отображать страницу, вызывая повторное запекание модзи, иногда в случайных местах на странице.
При работе с наборами символов CJK вы должны обязательно использовать кодировку символов UTF8 на протяжении всего срока службы вашей программы (хранение данных, извлечение, манипулирование данными в вашем коде, отображение в браузере и т. д.).
Что такое UTF8?UTF8 обрабатывает двоичные потоки данных, а не строки.Это означает, что битовые комбинации могут иметь переменную длину.Символы ASCII имеют фиксированную длину 8 бит, представляющих 1 байт, однако символы UTF8 могут состоять из 6 бит, 8 бит, 12 бит и т. д.Таким образом, UTF8 склонен к тому, что японцы называют «моджибаке».
Как программист, от базы данных до базы кода и браузера, вы должны попытаться полностью использовать UTF8.Для электронной почты вы можете использовать UTF8, но вы, вероятно, обнаружите, что большинство почтовых серверов и клиентов все еще устарели и используют смесь разных наборов символов (например,ISO9022X).
Настройки базы данныхЕсли вы являетесь пользователем MySQL, убедитесь, что все подключения к БД используют UTF8, а все таблицы/поля используют UTF8.По умолчанию MySQL использует наборы латинских (шведских) символов.Эти эксцентричные шведы обожают свое чувство юмора!!
Проверка вашей кодовой базыПо моему опыту, такие редакторы, как Notepad++, Notepad2, UltraEdit, e и т. д.у всех есть проблемы с поддержкой UTF8.В основном они работают, но поскольку их разработчики сами не используют языки CJK, они не совершенны.Такие проблемы, как отключение спецификации (маркировки порядка байтов), искаженные вкладки, плохое преобразование набора символов и т. д.все существующие проблемы.
Я настоятельно рекомендую использовать проверенный редактор UTF8, такой как Maruo.Это сделано японской компанией, но на сайте есть английская версия (и пробная версия). http://www.hidemaru.interlink.or.jp/software/
Наконец, вам может потребоваться преобразовать исходные файлы в UTF8.Особенно, если в самой кодовой базе содержатся строки языка CJK.
Манипулирование строкамиЛюбая строковая функция должна быть многобайтовой.Заметьте, я не сказал «двухбайтовый».UTF8 — это не двухбайтовый код, а многобайтовый, в зависимости от общего количества бит, используемых для представления символа.В PHP вам нужно специально вызывать строковые функции MB.Ruby и другие языки имеют более прозрачную поддержку, но вам нужно проверить документацию, чтобы определить свой вариант сервера приложений!
Мета-тегиПосетите google.co.jp или yahoo.co.jp, чтобы увидеть их МЕТА-заголовки.Это сайты, которые знают, как это сделать правильно.В основном включите следующий мета-тег в документ <HEAD>.
<meta http-equiv="content-type" content="text/html;набор символов=utf-8">
Обычно безопасно смешивать атрибуты типа английского HTML-документа с указанным выше символом.Таким образом, добавление тега META выше, похоже, работает в HTML-документе, который имеет:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
Электронная почтаЭто совершенно другая банка с червями.UTF8 хорошо работает, но многие старые японские клиенты чаще используют ISO2022X.Здесь не стоит об этом рассказывать.
Отладка проблем UTF8Если у вас есть надежный редактор UTF8, такой как Maruo, вы можете создавать статические страницы и решать свои проблемы.
надеюсь, это поможет
Перенаправьте данные на диск и используйте Шестнадцатеричный редактор.Большинство текстовых редакторов/просмотрщиков выполняют свои собственные преобразования за кулисами, поэтому трудно быть уверенным, что вы видите данные в их истинной форме.