Skip to content

Конвертер кодировок и восстановление кракозябр

Вставьте кракозябры — и получите исходный текст. Перебираются все правдоподобные цепочки кодировок: UTF-8, Windows-1251, GBK, Big5, Shift_JIS, EUC-KR. Бесплатно, локально в браузере.

Без отслеживания Работает в браузере Бесплатно
Всё декодируется локально, в вашем браузере — вставленный текст не покидает это устройство.

Восстановление кракозябр

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

Попробуйте эти

Наиболее вероятные оригиналы

Кандидатов: 4
  1. 测试

    Точно

    UTF-8 → GBK

  2. 娴嬭瘯

    Точно

    Windows-1252 / Latin-1 → UTF-8

  3. 测试

    Точно

    Windows-1252 / Latin-1 → GBK

  4. 测试

    Точно

    Windows-1251 → GBK

Конвертация и просмотр кодировок

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

Кодировка Байты Hex
UTF-8 6 E4 B8 AD E6 96 87
GBK 4 D6 D0 CE C4
GB18030 4 D6 D0 CE C4
Big5 4 A4 A4 A4 E5
Shift_JIS 4 92 86 95 B6
EUC-KR 4 F1 E9 D9 FE

Каждая цепочка кодировок, показанная на этой странице, получена тем же движком, на котором работает сама страница, а проверка обратным проходом за меткой «Точно» закреплена в модульных тестах на известных последовательностях байтов. — Go Tools Team · Sep 8, 2026

Собрано и проверено инженерной командой Go Tools.

Быстрые ответы

Во что превращается «Привет», если UTF-8 прочитать как Windows-1251?

UTF-8 → Windows-1251 В «РџСЂРёРІРµС‚». Двенадцать байтов UTF-8 распадаются на двенадцать отдельных однобайтовых символов Windows-1251.

А если те же байты прочитать как Windows-1252?

UTF-8 → Windows-1252 Получится «ÐŸÑ€Ð¸Ð²ÐµÑ‚»: тот же механизм, другая однобайтовая таблица. Отсюда узнаваемые Ð, Ñ и случайные знаки препинания в латинских текстах.

Можно ли восстановить текст, в котором есть U+FFFD?

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

Сколько байтов занимает русская буква?

2 против 1 байта Два в UTF-8 и один в Windows-1251; китайский иероглиф — три в UTF-8 и два в GBK. Из-за этой разницы колонки, размеренные в байтах, режут текст.

Что такое кракозябры?

Кракозябры — это то, что получается, когда текст записали одной кодировкой символов, а прочитали другой. Байты целы, неверно только их истолкование. На этом различии и держится возможность восстановления: если понять, какая кодировка записала байты и какая прочитала их неверно, ошибку можно прогнать назад и получить исходный текст.

У явления в каждом языке своё имя. По-английски прижилось японское 文字化け — mojibake, примерно «превращение символов», потому что в японских вычислениях проблема была повсеместной задолго до Unicode. В русском закрепилось слово «кракозябры», пришедшее из эпохи, когда Windows-1251, KOI8-R и CP866 сосуществовали и почта регулярно приходила нечитаемой. Кириллица и восточноазиатские письменности страдают сильнее латиницы по структурной причине: всё, что выше 0x7F, кодировки трактуют по-своему, а латинская строка обычно укладывается в чистый ASCII, о котором договорились все.

Восстановление проваливается ровно в одном случае. Встретив байты, не имеющие смысла в своей кодировке, декодер их не сохраняет — он подставляет U+FFFD и выбрасывает их. Эти символы потеряны навсегда. Всё остальное обратимо.

// The mistake, in three lines of JavaScript
const bytes = new TextEncoder().encode('测试');   // UTF-8: E6 B5 8B E8 AF 95
new TextDecoder('gbk').decode(bytes);            // '娴嬭瘯'  ← mojibake
new TextDecoder('windows-1252').decode(bytes);   // '测试'  ← same bytes, other mistake

Что умеет этот инструмент

Знать кодировку заранее не нужно

Вставьте испорченный текст, и инструмент сам переберёт цепочки. Проверяется каждое сочетание «записано в» и «прочитано как» среди UTF-8, GBK, Big5, Shift_JIS, EUC-KR, Windows-1252 и Windows-1251, а GB18030 доступна в разделе с байтами.

«Точно» — это проверка, а не догадка

Кандидат получает метку «Точно», только если прогон обратно по той же цепочке воспроизводит ваш ввод символ в символ. Это детерминированная проверка: ранжированная догадка не сказала бы, каким результатам можно верить.

Цепочка показана, а не спрятана

У каждого кандидата названы кодировка, которой байты были записаны, и кодировка, которая прочитала их неверно. Это то, что нужно, чтобы починить источник, а не чинить те же строки снова через неделю.

Честно о том, что не восстановить

Если во вводе уже есть символы замены, инструмент прямо об этом говорит и помечает всех кандидатов как частичных. Информация, уничтоженная при декодировании, не возвращается, и вид, будто это не так, стоит впустую потраченного вечера.

Байты во всех кодировках сразу

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

Ничего не покидает браузер

Декодирование использует встроенный в браузер TextDecoder. Ни отправки на сервер, ни записи в хранилище, ни изменения адресной строки — а это важно, потому что испорченный текст обычно приезжает прямо с продакшена.

Разобранные примеры

UTF-8 прочитан как GBK — классический случай

娴嬭瘯
测试

Два китайских иероглифа были корректно сохранены в UTF-8 (байты E6 B5 8B E8 AF 95), а затем программа прочитала эти шесть байтов как GBK. GBK группирует байты по два, поэтому вместо двух символов получилось три. Ровно это происходит, когда файл в UTF-8 открывают устаревшим приложением для Windows или когда кодировка соединения с базой данных выставлена в gbk, а данные лежат в UTF-8.

UTF-8 прочитан как Windows-1252 — однобайтовый вариант

测试
测试

Те же байты, другая ошибка. Windows-1252 однобайтовая, поэтому каждый из шести байтов UTF-8 стал отдельным символом. Языки на латинице попадают в эту версию постоянно: café превращается в café, naïve — в naïve. Опознавательные признаки — Ã, Â, â и знаки препинания, вылезающие парами. С русским текстом происходит то же самое: «Привет» в UTF-8, прочитанный как Windows-1252, даёт «ÐŸÑ€Ð¸Ð²ÐµÑ‚», а прочитанный как Windows-1251 — «РџСЂРёРІРµС‚».

Байты, которые уже есть в шестнадцатеричном виде

B2 E2 CA D4
测试

Иногда перед вами не испорченный текст, а шестнадцатеричный дамп из перехвата пакетов или из BLOB-колонки. Вставьте его во второй раздел и выберите кодировку. B2 E2 CA D4 — это 测试 в GBK; те же два иероглифа занимают в UTF-8 шесть байтов (E6 B5 8B E8 AF 95) против четырёх в GBK, а в Windows-1252 их вообще нельзя представить.

Текст, который восстановить нельзя

鏁版嵁搴�
(только частично)

数据库 записали в UTF-8 и прочитали как GBK, но последняя пара байтов не имела смысла в GBK, и декодер заменил её на U+FFFD. Этот байт потерян. Инструмент прямо помечает такой случай, а не подбирает догадку втихую: 数据 из начала строки восстановить всё ещё можно, а последний иероглиф невосстановим, и за ним придётся идти к исходным данным.

Как пользоваться конвертером

  1. 1

    Вставьте испорченный текст

    Просто вставьте его — определять кодировку заранее не нужно. Хватит короткого фрагмента: десятка символов обычно достаточно, чтобы цепочка определилась однозначно.

  2. 2

    Прочитайте верхнего кандидата и его метку

    «Точно» означает, что цепочка при обратном проходе воспроизводит ваш ввод символ в символ. «Частично» означает, что не воспроизводит, — такой результат стоит считать зацепкой.

  3. 3

    Посмотрите на цепочку кодировок

    У каждого кандидата показано, в какой кодировке текст был записан на самом деле и какая прочитала его неверно. Это говорит, что чинить в источнике, а не только что было написано в тексте.

  4. 4

    При необходимости загляните в байты

    Второй раздел показывает любой текст в байтах во всех распространённых кодировках и декодирует сырой hex в обратную сторону. Пригодится, чтобы подобрать длину колонки или разобрать кадр протокола.

Действия, которые всё портят

Конвертация текста, который не был испорчен

Если строка отображается правильно, а вы всё равно её конвертируете, то сами и создаёте кракозябры, которых пытались избежать. Сначала проверьте, как текст отображается, и учтите: отсутствующий шрифт даёт квадратики (□□□), а проблема кодировки — другие символы.

✗ Неверно
iconv -f UTF-8 -t GBK correct.txt > broken.txt
✓ Верно
# Сначала подтвердите текущую кодировку
file -I correct.txt   # charset=utf-8 → конвертировать нечего

Объявление набора символов, которого у данных нет

Смена объявленной кодировки колонки MySQL не перекодирует уже лежащие в ней байты. Если данные latin1 объявить как utf8, сервер начнёт отдавать байты, не являющиеся корректным UTF-8, а драйвер заменит их на U+FFFD — то есть уничтожит.

✗ Неверно
ALTER TABLE t MODIFY c VARCHAR(255) CHARACTER SET utf8mb4;
✓ Верно
-- Пройдите через двоичный тип, чтобы байты сохранились, а не были истолкованы заново
ALTER TABLE t MODIFY c VARBINARY(255);
ALTER TABLE t MODIFY c VARCHAR(255) CHARACTER SET utf8mb4;

Доверие частичному восстановлению

Кандидат с меткой «Частично» не прошёл обратный проход. Это зацепка, за которой стоит пойти, а не ответ, который можно записать обратно в базу. Если ничего не вернулось с меткой «Точно», ввод, скорее всего, уже потерял информацию — возвращайтесь к исходным байтам.

✗ Неверно
// Берём первого кандидата, что бы ни говорила метка
db.update(row.id, candidates[0].text);
✓ Верно
// Записываем обратно только то, что проходит обратный проход
if (candidates[0].lossless) db.update(row.id, candidates[0].text);

Перенос привычек Python 2 в Python 3

Вызов encode у того, что уже является bytes, или decode у того, что уже является строкой, в Python 3 приводит к исключению, а не к молчаливому проходу через ASCII. Декодируйте байты один раз, на границе, и дальше работайте с текстом как с текстом.

✗ Неверно
text = raw.decode('utf-8').encode('gbk').decode('utf-8')
✓ Верно
# Декодируем один раз на границе — той кодировкой, которая в файле на самом деле
with open(path, encoding='gbk') as f:
    text = f.read()

Когда это нужно

После миграции базы данных вместо текста мусор
Главный источник — старые таблицы MySQL, объявленные как latin1, но фактически хранящие байты UTF-8. Вставьте сюда испорченную строку и убедитесь в реальной цепочке, прежде чем писать ALTER TABLE: конвертация в неверную сторону превращает поправимую проблему в необратимую.
CSV, открытый в Excel, показывает бессмыслицу
Excel в Windows до сих пор считает, что CSV без BOM записан в системной кодовой странице, поэтому выгрузки в UTF-8 открываются кракозябрами. Подтвердите цепочку здесь, а затем выгружайте с BOM или импортируйте через мастер текста, явно указав кодировку.
Логи старого сервиса
Приложения, написанные под Windows-1251, GBK или Shift_JIS, пишут логи в этих кодировках, а современные системы сбора логов читают всё как UTF-8. Вставьте строку, чтобы восстановить её, — и, поскольку ничего никуда не отправляется, это можно делать с боевыми логами.
Имена файлов, испорченные ZIP-архивом
В формате ZIP нет поля кодировки, поэтому архивы, созданные в русской, китайской или японской Windows, несут имена файлов в Windows-1251, GBK или Shift_JIS, а инструменты Unix читают их как UTF-8. Восстановите настоящие имена здесь, прежде чем что-то переименовывать.
Подбор длины колонки в базе данных
Просмотр байтов показывает один и тот же текст сразу во всех кодировках. Русская буква занимает 2 байта в UTF-8 и 1 байт в Windows-1251, китайский иероглиф — 3 байта в UTF-8 против 2 в GBK; ровно такая разница и превращает VARCHAR(50) в ошибку с обрезанием.

Как появляются кракозябры

Байты выживают, смысл — нет
Кодирование сопоставляет символам байты, декодирование — наоборот. Кракозябры — это декодирование по неверной таблице. Байты при этом не пострадали, поэтому обратный прогон неверного декодирования восстанавливает оригинал в точности — при условии, что неверное декодирование ничего не выбросило.
Почему кириллица и восточноазиатские письменности страдают сильнее
ASCII занимает 0x00–0x7F, и все распространённые кодировки о нём договорились, так что английский текст проходит невредимым. Всё, что выше 0x7F, каждая кодировка трактует по-своему: русская буква — это один байт в Windows-1251 и два в UTF-8, китайский иероглиф — два байта в GBK и три в UTF-8. Скормите байты UTF-8 декодеру Windows-1251, и каждый байт станет отдельной буквой; скормите их декодеру GBK, и группировка сдвинется, дав другое число других символов.
Проверка обратным проходом
Для каждой цепочки-кандидата инструмент заново кодирует восстановленный текст первой кодировкой и заново декодирует второй. Если это в точности воспроизводит ввод, цепочка объясняет каждый символ, и кандидат помечается меткой «Точно». Кандидаты, не прошедшие проверку, всё равно показываются: частичное восстановление часто позволяет опознать текст, даже когда воспроизвести его не удаётся.
Откуда берутся таблицы кодировок
Таблицы даёт встроенный в браузер TextDecoder. С кодированием в обратную сторону сложнее: TextEncoder умеет только UTF-8, поэтому инструмент строит обратную таблицу, обходя пространство байтов и спрашивая у декодера, что означает каждая последовательность. Благодаря этому отображение всегда согласовано с поведением самого браузера, и на устройство не отгружается ни одной таблицы соответствий.
Эвристика ранжирования и её пределы
Помимо проверки обратным проходом кандидаты оцениваются по доле частотных китайских иероглифов (тех, у которых ведущий байт GBK попадает в 0xB0–0xF7) за вычетом штрафов за символы замены, полуширинную катакану и управляющие символы. Полуширинная катакана — сильный признак Shift_JIS, потому что в нормальном японском тексте она почти не встречается. Это эвристика: она разрешает ничьи, но не устанавливает истину, — и на кириллице сигнала почти не даёт, так что для русского текста решающей остаётся метка «Точно».

Как не допустить повторения

Чините источник, а не только строку
Цепочка кодировок под каждым кандидатом называет неверно настроенный компонент. Починить текст, не поправив кодировку соединения, чтение файла или настройку выгрузки, — значит завтра проделать то же самое со свежими данными.
Убедитесь в направлении, прежде чем конвертировать целый файл
Сначала прогоните через эту страницу одну показательную строку. Конвертация в неверную сторону может породить символы замены, и, в отличие от исходной ошибки, этот шаг необратим.
Задавайте кодировку явно везде
Кодировка соединения с базой данных, заголовок HTTP Content-Type, вызовы открытия файлов, выгрузки CSV. Каждое место, где по умолчанию берётся «системная кодировка», — это место, где та же ошибка вернётся при переезде кода на другую машину.
В MySQL выбирайте utf8mb4, а не utf8
utf8 в MySQL хранит не больше трёх байтов на символ, поэтому эмодзи и часть редких китайских иероглифов молча обрезаются. Настоящий UTF-8 — это utf8mb4. Это уже другая поломка, не кракозябры, и инструмент восстановления тут не поможет: байты действительно потеряны.
Держите исходные байты, пока исправление не проверено
Снимите копию, прежде чем что-либо конвертировать. Пока исходные байты существуют, любое неверное декодирование обратимо; как только их перезапишут символами замены, вернуть их не сможет ни этот инструмент, ни любой другой.

Часто задаваемые вопросы

Как исправить кракозябры вместо русского текста?
Вставьте испорченный текст в поле в начале страницы. Инструмент перебирает все правдоподобные цепочки кодировок и ранжирует результаты, так что определять кодировку самостоятельно не нужно. В подавляющем большинстве случаев ответ один из двух: текст в UTF-8 прочитали как Windows-1251 (тогда «Привет» выглядит как «РџСЂРёРІРµС‚») или как Windows-1252 (тогда получается «ÐŸÑ€Ð¸Ð²ÐµÑ‚»). Обе цепочки восстанавливаются точно. Для китайского и японского механизм тот же, только цепочки другие: UTF-8 → GBK и UTF-8 → Shift_JIS.
Что на самом деле проверяет метка «Точно»?
Она прогоняет восстановление в обратную сторону. Восстановленный текст снова кодируется первой кодировкой цепочки, а полученные байты снова декодируются второй. Если результат посимвольно совпал с тем, что вы вставили, цепочка полностью объясняет вставленное, и на кандидате стоит метка «Точно». Это детерминированная проверка обратным проходом, а не оценка похожести, — поэтому такому результату можно доверять так, как нельзя доверять ранжированной догадке.
Почему часть кракозябр восстановить невозможно?
Потому что повреждение произошло ещё до того, как вы их увидели. Встретив последовательность байтов, не имеющую смысла в своей кодировке, декодер не сохраняет её — он подставляет U+FFFD (отображается как �) и выбрасывает байты. Это потеря информации, и она необратима. Если в тексте есть �, эти конкретные символы потеряны, каким бы инструментом вы ни пользовались. Страница честно об этом сообщает, вместо того чтобы выдать уверенную на вид догадку.
Чем Windows-1251 отличается от KOI8-R и CP866?
Это три разные кириллические кодировки, в которых одни и те же буквы стоят по разным номерам, поэтому текст, записанный в одной и прочитанный другой, превращается в кракозябры. Windows-1251 — кодировка русской Windows, и сегодня почти все кракозябры возникают на паре Windows-1251 и UTF-8, поэтому перебор цепочек охватывает именно её. KOI8-R (RFC 1489) была стандартом Unix и раннего Рунета: её таблица построена так, что при сбросе восьмого бита остаётся читаемая латинская транслитерация. CP866 — кодировка DOS. Если байты действительно в KOI8-R или CP866, быстрее перевести их командой iconv -f KOI8-R -t UTF-8 in.txt > out.txt.
ISO-8859-1 — это то же самое, что Windows-1252?
По стандартам нет, но в любом браузере — да. Стандарт WHATWG Encoding, который браузеры и реализуют, считает iso-8859-1 и latin1 просто метками для windows-1252. Различаются они только в диапазоне 0x80–0x9F: у настоящей ISO-8859-1 там управляющие символы, а у Windows-1252 — печатные знаки препинания вроде длинного тире и фигурных кавычек. Именно эти печатные знаки и вылезают в кракозябрах, так что Windows-1252 из этой пары полезнее, и инструмент показывает её один раз под обоими именами.
Отправляется ли вставленный текст на сервер?
Нет. Всё декодирование выполняется в браузере встроенным TextDecoder; ничего не уходит в сеть, не пишется в хранилище и не попадает в адресную строку. Для этого инструмента это важнее обычного: кракозябры почти всегда приезжают из лога с продакшена, из карточки клиента или из дампа базы — то есть ровно из тех мест, содержимое которых нельзя вставлять в серверный сервис.
Можно ли перевести целый файл, а не фрагмент?
Эта страница работает с текстом, который вы вставляете. Для целых файлов есть командная строка: iconv -f CP1251 -t UTF-8 input.txt > output.txt в macOS и Linux или Get-Content -Encoding Default in.txt | Set-Content -Encoding UTF8 out.txt в PowerShell. Сначала прогоните здесь одну показательную строку, чтобы понять, какие кодировки называть в команде: ошибка в направлении на целом файле — это способ превратить проблему в одну строку в проблему в тысячу строк.
Почему показывается несколько кандидатов, а не один ответ?
Потому что читаемый текст способна дать не одна цепочка, и инструмент этого не скрывает. Кандидаты сортируются так: сначала самосогласованные (метка «Точно»), затем по эвристике читаемости, которая поощряет частотные китайские иероглифы и штрафует символы замены, полуширинную катакану и управляющие символы. Эвристика разрешает ничьи, а не устанавливает истину, — и на кириллице она почти не даёт сигнала, так что для русского текста опирайтесь на метку «Точно» и на саму цепочку. Когда два кандидата выглядят одинаково правдоподобно, показанная под каждым цепочка подсказывает, какой из них согласуется с тем, откуда данные пришли на самом деле.

Похожие инструменты

Все инструменты →

Таблица ASCII и конвертер

Кодирование и форматирование

Полная таблица ASCII: 128 символов в десятичном, шестнадцатеричном, восьмеричном и двоичном виде плюс конвертер текста и кодов. Управляющие символы — с escape-последовательностями, caret-записью и тем, где их встретить.

Base64 декодер и кодировщик

Кодирование и форматирование

Декодирование и кодирование Base64 онлайн бесплатно. Преобразование в реальном времени с полной поддержкой UTF-8 и эмодзи. Полная приватность — работает в браузере. Без регистрации.

Конвертер Base64 в изображение

Кодирование и форматирование

Декодируйте строку Base64 или data URI обратно в изображение прямо в браузере. Предпросмотр, размеры и MIME, затем скачивание как PNG, JPG, GIF, SVG. Без загрузки.

Конвертер CSV в JSON

Кодирование и форматирование

Конвертируйте CSV в JSON в браузере. RFC 4180, определение типов, заголовок, безопасность больших целых. 100% приватно, без загрузки.

Конвертер .env в JSON

Кодирование и форматирование

Вставьте файл .env — получите JSON мгновенно. Пароли БД, API-ключи и токены не покидают браузер: 100% приватно, без загрузки, парсер dotenv.

Бесплатный HTML-декодировщик сущностей — unescape HTML

Кодирование и форматирование

Декодируйте HTML-сущности и снимайте экранирование HTML онлайн — бесплатно, без регистрации, 100% в браузере. Преобразует именованные, десятичные и hex-ссылки обратно в символы; данные не загружаются.