Как вы решаете проблемы кодировки символов? - PullRequest
2 голосов
/ 27 августа 2008

Если все, что вы видите, это уродливые рамки без символов, какие инструменты или стратегии вы используете, чтобы выяснить, что пошло не так?

(Конкретный сценарий, с которым я сталкиваюсь - это поля без символов в

Ответы [ 3 ]

3 голосов
/ 27 августа 2008

Во-первых, «уродливые no-char box» могут не быть проблемой кодирования, это может быть просто знак, что у вас не установлен шрифт, который может отображать глифы на странице.

Большинство проблем с кодировкой символов возникает при передаче строк из одной системы в другую. Для веб-приложений это обычно происходит между браузером и приложением, между приложением и файловой системой и между приложением и базой данных.

Таким образом, вам необходимо проверить, откуда поступают неправильно закодированные данные, какую кодировку символов они имеют в источнике и какую кодировку они получают. Лучший способ - отправлять через знакомых вам персонажей проблемы, с которыми сталкивается система, и проверять их на каждом уровне приложения. Как они выглядят внутри приложения? В базе данных? Когда вы получите их обратно из базы данных? Когда они отображаются в браузере?

Извините за столь общий вопрос, но этот вопрос не дает больше возможности для работы.

2 голосов
/ 13 сентября 2008

Если данные, которые вы отправляете в браузер, становятся искаженными (moji-bake), вы получите мусорные символы. Кроме того, если вы укажете неправильный набор символов в заголовках META, ваш браузер будет некорректно отображать страницу, вызывая повторное запекание, иногда в случайных местах на странице.

При обработке наборов символов 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, они не совершенны. Такие проблемы, как отключение BOM (Byte Order Mark), искажение вкладок, плохое преобразование набора символов и т. Д. ... все существующие проблемы.

Я настоятельно рекомендую использовать проверенный редактор UTF8, такой как Maruo. Это сделано японской компанией, но есть английская версия (и пробная версия) на http://www.hidemaru.interlink.or.jp/software/

Наконец, вам может понадобиться конвертировать ваши исходные файлы в UTF8. Особенно, если в самой кодовой базе содержатся строки языка CJK.

Манипулирующие строки Любая строковая функция должна быть многобайтовой безопасной. Обратите внимание, я не сказал, двухбайтовый. UTF8 - это не двойной байт, а многобайтовый, в зависимости от общего количества битов, используемых для представления символа. В PHP вам нужно специально вызывать строковые функции MB. Ruby и другие языки имеют более прозрачную поддержку, но вам нужно проверить документацию на ваш вкус сервера приложений!

мета-теги Проверьте google.co.jp или yahoo.co.jp для их заголовков META. Это сайты, которые знают, как правильно. В основном включите следующую мета-метку в документ

Обычно безопасно смешивать английские атрибуты типа документа HTML с вышеуказанным символом. Таким образом, добавление тега META выше, похоже, работает в документе HTML, который имеет:

E-mail Это совершенно другая банка червей. UTF8 много работает, но многие старые японские клиенты используют ISO2022X чаще. Это не стоит освещать здесь.

Устранение неполадок UTF8 Если у вас есть надежный редактор UTF8, такой как Maruo, вы можете создавать статические страницы и решать ваши проблемы.

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

1 голос
/ 27 августа 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...