2008-08-27 17 views
2

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

(Конкретный сценарий я столкнулся нет-символьные коробки в пределах < выберите >, когда он должен показывать японские символы.)

ответ

3

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

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

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

Извините, что был настолько общим, но вопрос не дает больше работы.

+0

Также убедитесь, что приложение (консоль, редактор, веб-страницы) вы смотрите символы с правильно настроен, чтобы показать ожидаемый набор символов. – 2009-05-28 07:02:34

1

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

2

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

При обработке наборов CJK символов, вы должны быть уверены, чтобы использовать кодировку UTF8 на протяжении всего срока службы Вашей программы (для хранения данных, поиска, манипулирования данными в вашем коде, отображая в browsser и т.д ...)

Что такое UTF8? UTF8 обрабатывает двоичные потоки данных, а не строки. Это означает, что битовые комбинации могут иметь переменную длину. Символы ASCII имеют фиксированную длину 8 бит, представляющую 1 байт, однако символы UTF8 могут состоять из 6 бит, 8 бит, 12 бит и т. Д. Таким образом, UTF8 подвержен тому, что японцы называют «mojibake».

Как кодер, от базы данных к кодовой базе в браузер, вы должны попробовать и использовать UTF8 полностью. Для электронной почты вы можете использовать UTF8, но, вероятно, вы обнаружите, что большинство почтовых серверов и клиентов все еще старые и используют мишмаш разных наборов символов (например, ISO9022X).

Database Settings Если вы являетесь пользователем MySQL, то убедитесь, что вы должны убедиться, что все соединения с использованием DB UTF8, и что все таблицы/поля использовать UTF8. По умолчанию mysql использует латинские (шведские) наборы символов. Эти странные шорты любят свое чувство юмора!

Проверка ваш Codebase В моем опыте редакторов типа Notepad ++, Notepad2, UltraEdit, е, и т.д. ... все проблемы поддержки UTF8. Они в основном работают, но поскольку их разработчики не используют сами языки CJK, они не совершенствуются. Такие проблемы, как выключение спецификации (байт), искаженные вкладки, плохое преобразование набора символов и т. Д. ... все существующие проблемы.

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

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

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

META Тэги Посмотрите google.co.jp или yahoo.co.jp для своих заголовков META. Это сайты, которые хорошо знают, как это сделать. В основном включают в себя следующие метатег doucment < ГОЛОВА >

< META HTTP-эквив = "Content-Type" содержание = "текст/html; кодировка = UTF-8" >

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

< html xmlns = "http://www.w3.org/1999/xhtml" xml: lang = "en" lang = "en ">

Email Это совершенно другой может червей. UTF8 работает много, но многие более старые японские клиенты используют ISO2022X больше. Здесь этого не стоит.

Отладочные UTF8 Проблемы После того, как у вас есть надежный редактор UTF8 как Маие, вы можете создавать статические страницы и решить ваши проблемы.

Надежда, что помогает