Как конвертировать этих странных персонажей? (М, М, М, М, М)
Моя страница часто показывает такие вещи, как à ", Ã, ¬, ù, à вместо нормальных символов.
Я использую utf8 для заголовка страницы и MySQL кодировать. Как это произошло?
3 ответа
Это символы в кодировке utf-8. Используйте utf8_decode(), чтобы преобразовать их в обычные символы ISO-8859-1.
Если вы видите эти символы, вы, вероятно, просто не указали правильную кодировку символов. Потому что эти символы являются результатом, когда многобайтовая строка UTF-8 интерпретируется с помощью однобайтовой кодировки, такой как ISO 8859-1 или Windows-1252.
В этом случае ë
может быть закодирован с 0xC3 0xAB, который представляет символ Unicode ë
(U+00EB) в UTF-8.
Даже если utf8_decode
это полезное решение, я предпочитаю исправлять ошибки кодирования на самой таблице. На мой взгляд, лучше самим исправлять плохие символы, чем делать "хаки" в коде. Просто сделай replace
на поле на столе. Чтобы исправить плохо закодированные символы из OP:
update <table> set <field> = replace(<field>, "ë", "ë")
update <table> set <field> = replace(<field>, "Ã", "à")
update <table> set <field> = replace(<field>, "ì", "ì")
update <table> set <field> = replace(<field>, "ù", "ù")
куда <table>
это имя таблицы MySQL и <field>
Имя столбца в таблице. Вот очень хороший контрольный список для тех обычно плохо закодированных символов windows-1252 и utf-8 -> Диаграмма отладки, отображающая символы Windows-1252 в байты UTF-8 в символы Latin-1.
Не забудьте сделать резервную копию таблицы, прежде чем пытаться заменить любые символы на SQL!
[ Я знаю, что это ответ на очень старый вопрос, но столкнулся с проблемой еще раз. Некоторые старые машины с Windows не кодировали текст правильно, прежде чем вставить его в разборную таблицу utf8_general_ci. ]
Я действительно нашел кое-что, что сработало для меня. Он преобразует текст в двоичный, а затем в UTF8.
Исходный текст с проблемами кодирования:Если ¢â‚¬ËœYes’, какой был последний раз
SELECT CONVERT(CAST(CONVERT(
(SELECT CONVERT(CAST(CONVERT(english_text USING LATIN1) AS BINARY) USING UTF8) AS res FROM m_translation WHERE id = 865)
USING LATIN1) AS BINARY) USING UTF8) AS 'result';
Исправленный текст результата:если "Да", какой был ваш последний
Мой источник дважды был неправильно закодирован, поэтому я попросил двоих сделать это дважды. За один раз можно использовать:
SELECT CONVERT(CAST(CONVERT(column_name USING latin1) AS BINARY) USING UTF8) AS res FROM m_translation WHERE id = 865;
Пожалуйста, извините за ошибки форматирования