Статьи

Кракозябры в CSV — почему вместо букв странные символы и как исправить

Команда Opener5 мин чтения

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

Что такое кодировка — за одну минуту

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

В выгрузках из бухгалтерских программ и банков вы встретите три кодировки:

Сам файл обычно не сообщает, в какой он кодировке. Открывающей программе приходится угадывать, и если она ошибается, получается mojibake — так это явление называют по-научному, а по-простому — «кракозябры».

Читаем кракозябры: о чём говорит каждый вариант

Вид мусора подсказывает, что именно пошло не так.

Вы видите Ожидали Что произошло
é, ü, € é, ü, € Файл в UTF-8 открыт как Windows-1252
Сума (много Ð и Ñ) Сума (укр. «сумма») Кириллица в UTF-8 открыта как Windows-1252
Ñóìà (латиница с диакритикой) Сума Файл в 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 с правильной кодировкой

Не открывайте файл двойным щелчком. Вместо этого откройте пустую книгу и воспользуйтесь импортом «Из текстового/CSV-файла» на вкладке «Данные». В окне предпросмотра есть список, где выбирается кодировка (в английской версии он называется «File origin»):

Переключайтесь между ними и смотрите на предпросмотр: как только имена выглядят правильно, вы нашли нужную. Затем загрузите данные. Если файл нужно отправить дальше, сохраните его из Excel с типом «CSV UTF-8», а не просто «CSV», который может снова использовать старую кодировку.

Способ 3: Google Таблицы, LibreOffice или текстовый редактор

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

LibreOffice Calc. При открытии CSV LibreOffice показывает окно импорта текста со списком кодировок. Выберите Unicode (UTF-8), кириллическую Windows-1251 или западноевропейскую 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 расшифровывает и экспортирует файл полностью в вашем браузере, так что выписка не покидает ваше устройство.