2014-10-07 1 views
1

У меня есть простая проблема, но я не нашел решения для этой проблемы.UTF8 Неверное отображение верхней части экрана

Я использую кодировку utf8_general_ci в базе данных (MySQL), а на веб-сайте - PHP.

На странице HTML также используется utf-8 в качестве кодировки (<meta charset="utf-8">).

Проблема заключается в том, что в базе данных у меня есть слово, которое начинается с буквы Â, после того, как оно появляется в качестве Ã, разница между символами^и ~. Uncoded: Â. В приложении: Ã.

Проблема в том, что на веб-сайте появляется этот ? вместо Â, но если я изменил его для строчной буквы, он выглядит нормально. Только буквы верхнего регистра отображаются неправильно, если они имеют акцентуацию.

Надеюсь, я был чист.

Спасибо.

+0

Какие dbms? вы используете asp? PHP? – 1010

+0

уже отредактирован, я использую PHP. DB - это MySQL. Спасибо за помощь. – Fred

+0

Вы проверили кодировку символов вашего браузера? – 1010

ответ

0

Возможно, вам также понадобится установить кодировку символов передачи для ссылки на MySQL.

mysql_query('SET NAMES "utf8"'); 
mysql_query('SET CHARACTER SET utf8'); 
mysql_set_charset('utf8'); 

Если это не помогает, убедитесь, что сервер не переписав через заголовок <meta charset="utf-8"> на Content-Type HTTP. Вы, возможно, потребуется переписать, что и с помощью

header('Content-Type: text/html; charset=utf-8'); 
+0

Спасибо за быстрый ответ. Я постараюсь это сделать. Только один вопрос, если другие строчные слова с кодировкой работают, почему нет Uppercase? – Fred

+0

Возможно, что символы с нижним регистром имеют один и тот же код UTF-8 в качестве кодировки, которую вы связываете, но в верхнем регистре они отличаются друг от друга в другой кодировке. Возможно, они включали в себя еще один символ после нижнего регистра, и он переместил всю верхнюю часть на одну. – Zenorbi

+0

Это не работает ... ну, теперь письмо появляется, но другие выглядят следующим образом: á. Это не «декодирование», если в БД есть Â, это похоже на Â, если я положил Ã, появится Ã. Но закодированные символы выглядят закодированными. – Fred

0

Как вы можете видеть here декодирования UTF-8, как windows1252 или изо-8859-1 производит вместо.

и в windows1252 â имеет код E2, который совпадает с его кодовым номером unicode U + 00E2. , что заставляет меня думать, что некоторая часть вашего приложения правильно декодирует строку utf-8, но не сможет правильно ее закодировать.

Вы должны проверить, сохранены ли ваши данные в utf-8 в вашей базе данных, возможно, вы можете выбрать данные varchar как varbinary, чтобы быть уверенным (в sqlserver вы можете преобразовать в двоичный код, в mysql Я не знаю, если оно работает).

И проверьте источник вывода html, чтобы узнать, какие байты вы фактически получаете.

Это не правильный ответ, но он слишком длинный для комментария ...

+0

Это красная селедка, UTF-8 и Latin-1 и CP1252 в основном идентичны в диапазоне 160-255, который включает в себя как строчные, так и заглавные символы с акцентом (для некоторых смехотворно ограниченных выборки) западноевропейских языков. – tripleee

+0

ммм, кодовые точки совпадают, но utf8 использует два байта (ни один из них E2) для них, поэтому они не идентичны. – 1010

+0

Упс, большой промах, да; спасибо за исправление. Unicode и Latin-1 идентичны в этом диапазоне, но UTF-8, очевидно, нет. – tripleee