Советы

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 спросит кодировку и разделитель, а не будет их угадывать.

  1. Откройте в Excel пустую книгу.
  2. Выберите «Данные», затем «Из текстового/CSV-файла» и укажите файл.
  3. В поле «Источник файла» выберите 65001: Юникод (UTF-8) и проверьте предпросмотр.
  4. Если столбцы ещё не разделены, выберите правильный разделитель и загрузите данные.
  5. При сохранении используйте формат CSV UTF-8, чтобы следующая программа прочитала файл правильно.

Конвертация CSV в UTF-8

Конвертер данных сначала пробует прочитать файл как UTF-8 и при ошибке переключается на Windows-1252. Эта кодировка подходит для западноевропейских языков, но не для кириллицы, поэтому для файлов на русском в кодировке Windows-1251 надёжнее сначала открыть файл в Excel через импорт с правильной кодировкой и сохранить его как CSV UTF-8. Уже корректный UTF-8 конвертер переводит в JSON и другие форматы и сам распознаёт точку с запятой, запятую и табуляцию как разделители.

Если несколько раз конвертировать один и тот же файл не в ту сторону, текст можно испортить безвозвратно, например когда кракозябры снова сохраняют как UTF-8. Всегда начинайте с исходной выгрузки.

Проверьте, что ничего не изменилось

После конвертации стоит убедиться, что изменилась только кодировка, а не содержимое. Сравните два CSV-файла по ключевому столбцу, например номеру клиента: инструмент покажет изменённые ячейки, новые и пропавшие строки, и неудачный импорт станет заметен до того, как список пойдёт в работу.

Сделать сейчас

Другие советы