Как конвертировать этих странных персонажей? (М, М, М, М, М)

Моя страница часто показывает такие вещи, как à ", Ã, ¬, ù, à вместо нормальных символов.

Я использую 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;

Пожалуйста, извините за ошибки форматирования

Другие вопросы по тегам