Статті

Кракозябри в CSV: чому замість літер дивні символи і як це виправити

Команда Opener5 хв читання

Дивні символи на кшталт «Ã©» чи «Ð¡ÑƒÐ¼Ð°» означають, що CSV збережено в одному кодуванні тексту, а відкрито так, ніби воно інше: літери досі у файлі, просто їх неправильно декодують. Відкрий файл із правильним кодуванням (переглядач CSV визначає його автоматично) і збережи копію в UTF-8. Знаки питання («????») — інша історія: зазвичай вони означають, що літери загубилися ще тоді, коли файл записували.

Що таке кодування — за хвилину

CSV-файл — це звичайний текст, а на диску текст — просто послідовність чисел (байтів). Кодування — це таблиця, яка каже, яке число відповідає якій літері. Для базових латинських літер і цифр майже всі кодування збігаються — тому числа у вивантаженні з банку виглядають нормально, а імена та призначення платежів перетворюються на сміття.

Три кодування, які трапляються у вивантаженнях із бухгалтерських програм і банків:

Сам файл зазвичай не повідомляє, яке в нього кодування. Програма, яка його відкриває, мусить вгадати, і якщо не вгадає, вийде mojibake — так технічно називають те, що в народі звуть кракозябрами.

Читаємо кракозябри: що означає кожен варіант

Те, як саме виглядає «сміття», підказує, що пішло не так.

Ти бачиш Мало бути Що сталося
é, ü, € é, ü, € Файл UTF-8 відкрито як Windows-1252
Сума (багато Ð і Ñ) Сума Кирилицю в UTF-8 відкрито як Windows-1252
РЎСѓРјР° (багато Р і С) Сума Кирилицю в UTF-8 відкрито як Windows-1251
Ñóìà (латинські літери з діакритикою) Сума Файл Windows-1251 відкрито як Windows-1252
Cafй Café Файл Windows-1252 відкрито як Windows-1251
� (чорний ромб зі знаком питання) будь-яка літера Файл у старому кодуванні відкрито як UTF-8
???? будь-яка літера Літери загубилися під час збереження файлу

Пари на кшталт «Ã» + щось, «Ð»/«Ñ» + щось або «Р»/«С» + щось — це відбиток UTF-8, прочитаного як старе кодування: кожна літера поза базовою латиницею в UTF-8 займає два байти, а стара таблиця показує кожен байт як окремий символ. Це добра новина — нічого не втрачено, і якщо відкрити файл як UTF-8, усе виправиться.

А от звичайні знаки питання — погана новина. Зазвичай вони з’являються, коли програма намагалася зберегти текст у кодуванні, де для цих літер немає місця (наприклад, кирилицю в Windows-1252), і замінила кожну з них на ?. Оригінальних літер у файлі більше немає, і жоден переглядач їх не поверне. Вихід — вивантажити файл ще раз із системи-джерела, вибравши UTF-8 або правильне регіональне кодування, якщо вікно експорту таке пропонує.

BOM: чому Excel неправильно читає UTF-8

Файл UTF-8 може починатися з трьох невидимих байтів, які називаються маркером порядку байтів (BOM, byte order mark). Це підказка: «цей файл у UTF-8».

Коли ти двічі клацаєш CSV, Excel значною мірою покладається на цю підказку. З BOM він зазвичай правильно читає UTF-8; без нього часто вважає, що файл у старому кодуванні твого комп’ютера, — і саме так цілком нормальне вивантаження з банку в UTF-8 перетворюється на «Ð¡ÑƒÐ¼Ð°» (а на комп’ютері з українськими регіональними налаштуваннями — на «РЎСѓРјР°»). Інші програми працюють навпаки й показують BOM як сміття на кшталт  на початку заголовка першого стовпця. Якщо ти бачиш таке, файл у UTF-8, а BOM показується як текст.

Спосіб 1: відкрий з автоматичним визначенням

Найшвидше — дати визначити кодування за тебе. Переглядач CSV від Opener спершу пробує UTF-8, а якщо не підходить — Windows-1251 чи Windows-1252, залежно від тексту, тож імена й описи відображаються правильно без жодного майстра імпорту. Він також визначає роздільник — кому, крапку з комою, табуляцію чи вертикальну риску.

Файл читається у твоєму браузері й нікуди не завантажується, а це важливо для зарплатних відомостей, рахунків і банківських виписок. Щоб виправити файл для інших програм, скористайся кнопкою експорту: отримаєш чисту копію таблиці в UTF-8 (саме в поточному вигляді, тож якщо потрібні всі рядки, спершу очисти пошук). Якщо проблема не в кракозябрах, а в тому, що все опиняється в одному стовпці, читай, чому CSV відкривається в один стовпець.

Спосіб 2: імпорт в Excel із правильним «File origin»

Не відкривай файл подвійним клацанням. Натомість відкрий порожню книгу й скористайся імпортом «From Text/CSV» на вкладці «Дані» (Data). У вікні попереднього перегляду є список File origin (походження файлу), де вибирають кодування:

Перемикай їх і стеж за попереднім переглядом: щойно імена виглядатимуть правильно, це і є потрібне кодування. Потім завантаж дані. Якщо файл треба переслати далі, збережи його з Excel як тип «CSV UTF-8», а не звичайний «CSV», бо той може знову використати старе кодування.

Спосіб 3: Google Sheets, LibreOffice або текстовий редактор

Google Sheets. Імпорт CSV у Google Sheets («Файл → Імпортувати») добре працює з файлами в UTF-8, а у вікні імпорту можна вибрати роздільник. Для старих кодувань цей шлях менш надійний: якщо вивантаження у Windows-1251 чи Windows-1252 досі показує кракозябри, перетвори його на UTF-8 одним з інших способів та імпортуй уже цю копію.

LibreOffice Calc. Коли відкриваєш CSV, LibreOffice показує вікно імпорту тексту зі списком Character set (набір символів). Вибери Unicode (UTF-8), Cyrillic (Windows-1251) або Western Europe (Windows-1252) — і попередній перегляд одразу оновиться. Програма безкоштовна й працює на Windows, macOS і Linux.

Текстовий редактор. Редактори на кшталт Блокнота у Windows, TextEdit на macOS чи редактора коду VS Code дають вибрати кодування під час збереження. Підступ у тому, що редактор має спершу відкрити файл у правильному кодуванні. Якщо в редакторі текст виглядає правильно, збережи його як UTF-8. Якщо він уже там виглядає як кракозябри, збереження лише закріпить сміття — спершу відкрий файл заново з правильним кодуванням.

Часті запитання

Чи можна виправити «????» у CSV?

Зазвичай ні. Знаки питання означають, що символи замінили під час запису файлу, тож оригінальних літер у ньому немає. Вивантаж файл ще раз із бухгалтерської програми чи банку, вибравши UTF-8, якщо це можливо.

Яке кодування вибирати під час збереження чи експорту?

UTF-8. Воно зберігає будь-яку абетку, і його розуміють усі сучасні програми. Якщо колеги відкриватимуть файл подвійним клацанням в Excel, використовуй в Excel варіант «CSV UTF-8», щоб файл починався з BOM.

Чи зміняться мої числа, якщо змінити кодування?

Ні. Цифри, крапки й коми однакові в UTF-8, Windows-1251 і Windows-1252, тож суми й дати не постраждають. Змінюються лише літери поза базовою латиницею.

Чи безпечно виправляти банківську виписку онлайн?

Лише якщо інструмент не завантажує її на сервер. Переглядач CSV декодує й експортує файл повністю у твоєму браузері, тож виписка не залишає твого пристрою.