Кракозябри в CSV: чому замість літер дивні символи і як це виправити
Дивні символи на кшталт «Ã©» чи «Ð¡ÑƒÐ¼Ð°» означають, що CSV збережено в одному кодуванні тексту, а відкрито так, ніби воно інше: літери досі у файлі, просто їх неправильно декодують. Відкрий файл із правильним кодуванням (переглядач CSV визначає його автоматично) і збережи копію в UTF-8. Знаки питання («????») — інша історія: зазвичай вони означають, що літери загубилися ще тоді, коли файл записували.
Що таке кодування — за хвилину
CSV-файл — це звичайний текст, а на диску текст — просто послідовність чисел (байтів). Кодування — це таблиця, яка каже, яке число відповідає якій літері. Для базових латинських літер і цифр майже всі кодування збігаються — тому числа у вивантаженні з банку виглядають нормально, а імена та призначення платежів перетворюються на сміття.
Три кодування, які трапляються у вивантаженнях із бухгалтерських програм і банків:
- UTF-8 — сучасний стандарт. Може зберігати будь-яку абетку в одному файлі. Літери поза базовою латиницею займають по два або більше байтів.
- Windows-1251 — старіше однобайтове кодування для кирилиці (українська, російська, болгарська, сербська). Чимало старих бухгалтерських програм досі вивантажують дані в ньому.
- Windows-1252 — старіше однобайтове кодування для західноєвропейських мов: é, ü, ñ, ø, € тощо.
Сам файл зазвичай не повідомляє, яке в нього кодування. Програма, яка його відкриває, мусить вгадати, і якщо не вгадає, вийде 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 (походження файлу), де вибирають кодування:
- 65001: Unicode (UTF-8) — для файлів, де видно
é,СумачиРЎСѓРјР°; - варіант Cyrillic (Windows), 1251, — для старих вивантажень кирилицею;
- варіант Western European (Windows), 1252, — для старих західноєвропейських вивантажень.
Перемикай їх і стеж за попереднім переглядом: щойно імена виглядатимуть правильно, це і є потрібне кодування. Потім завантаж дані. Якщо файл треба переслати далі, збережи його з 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 декодує й експортує файл повністю у твоєму браузері, тож виписка не залишає твого пристрою.