~/guides/csv-cyrillic-excel-encoding

CSV

CSV с кириллицей превращается в квадратики после открытия в Excel: как это исправить

Почему Excel показывает кракозябры вместо кириллицы в CSV файле, и как кодировка и BOM-метка решают эту проблему раз и навсегда.

Экспортировали таблицу из внутренней системы, открыли в Excel, а вместо нормальных русских названий колонок — вопросительные знаки в ромбиках или откровенные кракозябры. Файл при этом открывается в текстовом редакторе нормально. Проблема почти всегда в кодировке, а не в самих данных.

Откуда берется расхождение в кодировках

UTF-8 кодирует кириллические символы двумя и более байтами, а Windows-1251 — одним байтом на символ. Если Excel открывает UTF-8 файл, ожидая Windows-1251, каждый кириллический символ распадается на несколько нечитаемых.

Роль невидимой BOM-метки

BOM, byte order mark, это несколько невидимых байтов в самом начале файла, которые некоторые редакторы добавляют для явного указания кодировки. Без BOM Excel в русской локализации по умолчанию предполагает Windows-1251, даже если файл на самом деле в UTF-8.

Байты в начале файла с BOM для UTF-8: EF BB BF. Если добавить эти три байта в начало UTF-8 файла, Excel корректно распознает кодировку и покажет кириллицу без искажений.

Симптом Вероятная причина
Вопросительные знаки в ромбиках UTF-8 файл без BOM, Excel читает как Windows-1251
Абсолютно нечитаемые символы во всем файле Файл на самом деле в другой кодировке, не UTF-8 и не Windows-1251
Кракозябры только в отдельных ячейках Файл собран из кусков в разных кодировках, частая проблема при копипасте между системами
Все нормально в LibreOffice, но не в Excel Другая программа честно определяет кодировку по содержимому, а не полагается на локаль системы

Быстрая проверка и исправление

Прежде чем гадать, стоит определить реальную кодировку файла и сразу перекодировать в UTF-8 с BOM. CSV Encoding Detector & Converter анализирует байты начала файла, определяет вероятную кодировку и отдает результат уже в чистом UTF-8, который Excel откроет корректно.

Альтернативный путь через сам Excel

Если конвертировать файл заранее не вариант, в самом Excel можно импортировать CSV не через обычное открытие файла, а через меню Данные, Получить данные, Из текстового или CSV файла — там явно указывается исходная кодировка перед импортом, и Excel не полагается на угадывание по умолчанию.

Итоговый чеклист

Кракозябры вместо кириллицы в Excel почти всегда означают несовпадение между реальной кодировкой файла и той, которую Excel предположил по умолчанию для локали системы.

BOM-метка в начале UTF-8 файла явно указывает Excel правильную кодировку и решает проблему без танцев с ручной перекодировкой каждый раз.

Импорт через специальный диалог с явным указанием кодировки в Excel работает как обходной путь, если перекодировать сам файл заранее нет возможности.