CSV показывает кракозябры вместо букв: причина и решение
Вы экспортируете список клиентов, открываете его в другой программе, и фамилия Щукин превращается в набор символов вроде Щукин или в вопросительные знаки. Данные не повреждены. Программа просто прочитала байты в другой кодировке, чем та, в которой их записали.
Обновлено:
Причина: разные кодировки для одних и тех же букв
CSV-файл — это обычный текст без какой-либо пометки о том, как закодированы символы. Сегодня большинство программ пишут в UTF-8, где кириллическая буква занимает два байта. Старые программы Windows и многие версии Excel в русскоязычной системе используют кодировку Windows-1251, где та же буква занимает один байт.
Если UTF-8 прочитать как однобайтовую кодировку, каждая буква превращается в два странных символа, отсюда и кракозябры. Если однобайтовый текст прочитать как UTF-8, отдельные байты оказываются недопустимыми и обычно отображаются как вопросительные знаки или символы замены.
Типичные ситуации
Интернет-магазин, CRM или веб-форма выгружает UTF-8, а по двойному щелчку файл открывается в Excel с испорченными буквами. Так происходит потому, что многие версии Excel распознают UTF-8, только если файл начинается с невидимой метки порядка байтов.
Бывает и наоборот: список, сохранённый из Excel как классический CSV, импортируют в сервис рассылок или скрипт, и там появляются вопросительные знаки, потому что программа ожидает UTF-8.
Смежная проблема — разделитель. В странах, где запятая служит десятичным разделителем, в том числе в России, Excel ожидает точку с запятой между столбцами, и файл с запятыми может целиком оказаться в одном столбце.
Как правильно открыть файл UTF-8 в Excel
Не открывайте файл двойным щелчком, а импортируйте его. Тогда Excel спросит кодировку и разделитель, а не будет их угадывать.
- Откройте в Excel пустую книгу.
- Выберите «Данные», затем «Из текстового/CSV-файла» и укажите файл.
- В поле «Источник файла» выберите 65001: Юникод (UTF-8) и проверьте предпросмотр.
- Если столбцы ещё не разделены, выберите правильный разделитель и загрузите данные.
- При сохранении используйте формат CSV UTF-8, чтобы следующая программа прочитала файл правильно.
Конвертация CSV в UTF-8
Конвертер данных сначала пробует прочитать файл как UTF-8 и при ошибке переключается на Windows-1252. Эта кодировка подходит для западноевропейских языков, но не для кириллицы, поэтому для файлов на русском в кодировке Windows-1251 надёжнее сначала открыть файл в Excel через импорт с правильной кодировкой и сохранить его как CSV UTF-8. Уже корректный UTF-8 конвертер переводит в JSON и другие форматы и сам распознаёт точку с запятой, запятую и табуляцию как разделители.
Если несколько раз конвертировать один и тот же файл не в ту сторону, текст можно испортить безвозвратно, например когда кракозябры снова сохраняют как UTF-8. Всегда начинайте с исходной выгрузки.
Проверьте, что ничего не изменилось
После конвертации стоит убедиться, что изменилась только кодировка, а не содержимое. Сравните два CSV-файла по ключевому столбцу, например номеру клиента: инструмент покажет изменённые ячейки, новые и пропавшие строки, и неудачный импорт станет заметен до того, как список пойдёт в работу.
