Какво е mojibake?

Mojibake (у нас казват „йероглифи“ или „странни символи“) е текст, превърнал се в безсмислица: Здравей или Çäðàâåé вместо Здравей. Появява се, когато текстът е записан в едно кодиране, а е прочетен в друго, и почти винаги може да се поправи напълно. Поставете развален текст отдолу и опитайте.

Работи с текст и с тези файлове:

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

Например експорти от Excel и счетоводни програми, архиви на бази данни, субтитри или код на сайтове.

Поправяне

  1. Пуснете файл или поставете текст
  2. Поправката е автоматична
  3. Копирайте или изтеглете
или просто пуснете файл тук
  • Без качване. Файловете се поправят направо в браузъра и никога не напускат устройството ви.

  • Сървъри в ЕС. Mojibuster работи на сървър в Финландия (ЕС), затова се прилага Общият регламент относно защитата на данните (GDPR). Текст на GDPR (EUR-Lex)

Откъде идват думите

В България нечетимите символи обикновено наричат „йероглифи“ – „йероглифи вместо кирилица“, „странни символи“ или „въпросителни вместо букви“. На английски и в повечето други езици се казва mojibake (文字化け): на японски „moji“ е „символ“, а „bake“ – „превръщане“. През 90-те години японските компютри използваха едновременно Shift_JIS, EUC-JP и ISO-2022-JP и развалените имейли бяха нещо обичайно. При кирилицата историята е подобна: Windows-1251, KOI8-R и DOS кодиранията дълго са съществували паралелно.

Как възникват йероглифите

Компютърът пази текста като байтове. Кодирането определя на коя буква съответства всеки байт. В UTF-8 буквата З заема два байта: D0 97. Програма, която ги чете като Windows-1251, показва по един символ за всеки байт: Р вместо D0 и — вместо 97.

На тази стъпка нищо не се губи – байтовете са на мястото си, просто са прочетени грешно. Затова йероглифите обикновено могат да се върнат в нормален вид: Mojibuster превръща грешните символи обратно в байтове и ги чете в правилното кодиране.

Текст в UTF-8, прочетен като Windows-1251

Йероглифи

Здравей! Срещата е в петък от 15:00, стая 204. Ъгълът на улицата е тъмен.

След поправката

Здравей! Срещата е в петък от 15:00, стая 204. Ъгълът на улицата е тъмен.

Какви йероглифи има

  • Здравей – UTF-8, прочетен като Windows-1251. Най-честият случай, например в Excel: йероглифи в Excel.
  • Çäðàâåé – текст в Windows-1251, показан в западноевропейско кодиране. Повече: Windows-1251 към UTF-8.
  • ъДТБЧЕК – текст в KOI8-R, прочетен като Windows-1251. Среща се в стари имейли и файлове от Unix сървъри.
  • ???? – буквите вече са заменени с въпросителни. Тях, за съжаление, не може да се възстановят.

Mojibake на други езици

  • Японски: 縺薙s縺ォ縺。縺ッ вместо こんにちは – UTF-8, прочетен като Shift_JIS. Повече на японската страница.
  • Китайски: 浣犲ソ вместо 你好 – UTF-8, прочетен като GBK. На китайски се нарича 乱码 (luànmǎ, „хаотичен код“).
  • Западни езици: é, ñ или € вместо é, ñ или € – най-разпространената форма в света.

Типични причини

  • Excel отваря CSV в UTF-8 без BOM в кодиране Windows-1251.
  • Връзката с базата данни използва cp1251 или latin1, а данните са в UTF-8.
  • Сайт или имейл посочва грешен charset.
  • Стари файлове в Windows-1251 или KOI8-R се отварят в програма, която очаква UTF-8.
  • Вече развален текст се прекодира още веднъж – получават се двойни йероглифи.

Винаги ли може да се поправи?

Почти винаги, докато байтовете са цели. Не може, ако програма е заменила буквите с ? или със символа за заместване � – тогава оригиналната информация е загубена. Mojibuster поправя всичко, което може да се поправи, и съобщава колко места са загубени.

Как да избегнете йероглифите

  • Записвайте файловете в UTF-8, а CSV за Excel – във формат CSV UTF-8 (разделен със запетаи).
  • Посочвайте кодирането: <meta charset="utf-8"> в HTML, utf8mb4 в MySQL и MariaDB.
  • Прекодирайте текста само веднъж, на границата между две системи.
  • При импорт избирайте кодирането сами, вместо програмата да гадае.

Често задавани въпроси

Защо се нарича mojibake?

Това е японска дума (文字化け, „превръщане на символите“). В Япония проблемът е бил толкова чест, че думата преминава в английския и става международен термин.

Повреден ли е файлът, или е вирус?

Не. Йероглифите са проблем с показването, а не вирус, и обикновено данните не са загубени. Файлът просто е прочетен в грешно кодиране.

Каква е разликата между йероглифите и символа �?

Йероглифи като Здравей още съдържат оригиналните байтове и могат да се поправят. Символът � означава, че програмата не е успяла да прочете байт и го е заменила – тази буква е загубена.

Изпраща ли се текстът към сървър?

Не. Mojibuster поправя текста направо в браузъра. Той не се изпраща и не се съхранява никъде.

Други ръководства