Как устранить проблемы с кодировкой символов?

StackOverflow https://stackoverflow.com/questions/29499

  •  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, вы можете создавать статические страницы и решать свои проблемы.

надеюсь, это поможет

Перенаправьте данные на диск и используйте Шестнадцатеричный редактор.Большинство текстовых редакторов/просмотрщиков выполняют свои собственные преобразования за кулисами, поэтому трудно быть уверенным, что вы видите данные в их истинной форме.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top