Исправление кракозябр

Когда é превращается в é, а апостроф в ’, буквы обычно не потеряны. Просто что-то прочитало их не с той таблицей символов. Вставьте текст, и мы прочитаем его заново правильно.

Исправленный текст

исправлено лучшая догадка, проверьте утеряно, введите заново · Наведите на выделенное слово или коснитесь его, чтобы увидеть исходные символы.

Исправление выполняется в вашем браузере. Ваш текст никуда не отправляется.

Одна буква, два способа ее прочитать

В файле нет букв. В нем числа, которые называют байтами, а кодировка это таблица, где сказано, какое число какой символ означает. Почти все, что пишется сегодня, использует UTF-8: латинские буквы занимают один байт, буквы с диакритикой два, а типографские знаки вроде фигурных кавычек или знака евро три.

Windows-1252 это более старая таблица, где каждый символ ровно один байт. Дайте текст в UTF-8 программе, которая читает его по этой старой таблице, и каждый байт выйдет отдельным символом. Два байта é (C3 A9) покажутся как Ã и ©. У этой поломки есть имя, взятое из японского, mojibake (по-нашему «кракозябры»), и вы наверняка встречали ее в одной из этих форм.

НаписаноПоказаноГде встречается
é èé ècafé, crème
ü ö ßü ö ßZürich, Köln, Straße
ññseñor, España
ã çã çSão Paulo, ação
ø åø Ã¥København, Århus
’ “ —’ “ —don’t, цитаты, тире
€â‚¬цены

Как делается исправление

Инструмент проходит по тексту и останавливается на каждой цепочке символов из верхней половины Windows-1252. Он превращает каждый обратно в байт, из которого тот получился, и проверяет, складываются ли эти байты в допустимый символ UTF-8.

Допустимый значит: ведущий байт от C2 до F4, за ним нужное число байтов продолжения (от 80 до BF), без избыточно длинных форм и без суррогатных значений. Если да, цепочка заменяется символом, который она кодирует. Если нет, ничего не меняется. Эта же проверка защищает правильно написанный текст. é в здоровом слове «café» это один байт в Windows-1252, а один байт никогда не сойдет за пару UTF-8.

В тексте, который испортили, сохранили и испортили снова, видны более длинные цепочки вроде é. Инструмент повторяет проход до пяти раз, снимая по одному слою, пока текст не перестанет меняться.

Как читать три вида подсветки

Исправлено
Байты декодировались чисто, эти правки надежны. Наведите на слово, чтобы увидеть, что оно заменило.
Догадка, проверьте
Одного байта не хватало, и инструмент заполнил пробел. Таких случаев два. Ã, за которой идет пробел, читается как à, потому что второй байт этой буквы (A0) также неразрывный пробел, а его часто превращают в обычный. Одиночное †читается как закрывающая фигурная кавычка, потому что у ее третьего байта (9D) нет символа в Windows-1252, и он обычно пропадает. Инструмент делает такие догадки, только если в тексте есть другие явные признаки mojibake.
Утрачено, наберите заново
Знак � или вопросительный знак между двумя буквами, как в r?sum?. Какая-то программа заменила символ перед сохранением, и декодировать уже нечего. Инструмент отмечает место, а букву вписываете вы.

Лишняя Â перед пробелом это первая половина неразрывного пробела. Инструмент ее убирает и показывает оставшийся пробел бледной меткой, чтобы его можно было отличить от обычного.

Остановить там, где начинается

Исправление вставленного текста лечит лишь симптом. Где-то выше по цепочке одна программа пишет UTF-8, а другой об этом не сказали. Вот обычные места.

CSV, открытый в Excel
Если открыть CSV двойным щелчком, Excel предполагает старую таблицу Windows. Вместо этого идите через «Данные», «Из текстового/CSV-файла» и задайте «Источник файла» 65001: Unicode (UTF-8). При экспорте выбирайте «CSV UTF-8 (разделитель запятая)».
База данных MySQL или MariaDB
Столбцы, объявленные как latin1, в которых лежат байты UTF-8, или дамп, импортированный с неверным --default-character-set. И таблицы, и соединение должны использовать utf8mb4.
Веб-страница
Поставьте <meta charset="utf-8"> первым в <head> и сделайте так, чтобы сервер отправлял Content-Type: text/html; charset=utf-8.
Письмо или текстовый файл
Для почты заголовок Content-Type: text/plain; charset=UTF-8. Для файлов сохраняйте в UTF-8 через меню редактора «Сохранить с кодировкой».

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

Чего не восстановить

Инструмент справляется с одной аварией, которая к тому же встречается чаще всего: UTF-8, прочитанный как Windows-1252 или Latin-1. Подходит любой язык, включая греческий и кириллицу, если путаница была именно такой. Другие пары вне его возможностей, например Mac Roman (где é выглядит как √©), Windows-1251 и Shift-JIS. Догадка, превращающая à с пробелом в à, подходит итальянскому, португальскому и другим языкам, где эта буква бывает отдельным словом. В любом другом тексте проверьте ее.

Частые вопросы

Почему é показывается как é?

Текст сохранили в UTF-8, где é занимает два байта, а затем открыли как Windows-1252, где каждый байт это отдельный символ. Два байта показываются как Ã и ©. На этом этапе ничего не потеряно, поэтому все можно обратить.

Что значит ’ в моем тексте?

Это фигурный апостроф (’). В UTF-8 этот знак занимает три байта, и каждый показали отдельно. Та же авария превращает открывающие кавычки в “, а длинные тире в —.

Откуда Â перед пробелами или перед £?

Неразрывный пробел это два байта C2 A0, а знак фунта C2 A3. При чтении не той таблицей первый байт становится видимой Â. Инструмент ее убирает и сохраняет следующий за ней символ.

Может ли он исправить вопросительные знаки и черные ромбы (�)?

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

Как исправить кракозябры на всем сайте WordPress?

Проверьте, что DB_CHARSET в wp-config.php равен utf8mb4 и что таблицы не используют сопоставление latin1. Если страниц всего несколько, вставьте сюда каждый текст и верните исправленную версию. Для всей базы данных пусть таблицы сначала преобразуют на копии, имея на руках резервную копию.

Отправляется ли вставленный текст на сервер?

Нет. Декодирует скрипт в вашем браузере, и страница не делает ни одного запроса с вашим текстом.