Исправление кракозябр
Когда é превращается в é, а апостроф в ’, буквы обычно не потеряны. Просто что-то прочитало их не с той таблицей символов. Вставьте текст, и мы прочитаем его заново правильно.
Исправленный текст
исправлено лучшая догадка, проверьте утеряно, введите заново · Наведите на выделенное слово или коснитесь его, чтобы увидеть исходные символы.
Исправление выполняется в вашем браузере. Ваш текст никуда не отправляется.
Одна буква, два способа ее прочитать
В файле нет букв. В нем числа, которые называют байтами, а кодировка это таблица, где сказано, какое число какой символ означает. Почти все, что пишется сегодня, использует 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. Если страниц всего несколько, вставьте сюда каждый текст и верните исправленную версию. Для всей базы данных пусть таблицы сначала преобразуют на копии, имея на руках резервную копию.
Отправляется ли вставленный текст на сервер?
Нет. Декодирует скрипт в вашем браузере, и страница не делает ни одного запроса с вашим текстом.