Как починить проблемы кодировки CSV — UTF-8 против Windows-1252
Проблемы кодировки — причина №1 искажённого текста в CSV. Это руководство объясняет, что такое кодировка, почему UTF-8 и Windows-1252 сталкиваются, и как чинить это в каждом типичном туле.
Что такое кодировка символов?
Кодировка символов — это маппинг байтов в символы. UTF-8 использует 1–4 байта на символ и покрывает все Unicode-символы. Windows-1252 (также CP-1252 или Latin-1) использует ровно 1 байт на символ и покрывает западноевропейские языки.
Проблема: последовательность байтов вроде 0xC3 0xA9 означает é в UTF-8, но неправильно читается как два символа в Windows-1252. Если декодировать с неправильной кодировкой — получите mojibake, искажённый текст, выглядящий как случайные символы.
Как определить кодировку CSV-файла
В Python: import chardet; chardet.detect(open('file.csv','rb').read()) возвращает кодировку с уровнем уверенности. Команда file в Unix: file -i data.csv показывает определённый charset.
На практике два самых частых случая: (1) файл — валидный UTF-8, или (2) это Windows-1252 и содержит символы с кодами выше 0x7F. CSV First Aid проверяет оба автоматически.
Починка кодировки в Python
Чтение: pd.read_csv('file.csv', encoding='cp1252'), если файл Windows-1252. Конвертация: прочитать с правильной кодировкой, записать как UTF-8: df.to_csv('clean.csv', encoding='utf-8', index=False).
Если не уверены в кодировке: попробовать сначала UTF-8. Если видите символы замены (\ufffd) — откатиться на cp1252. CSV First Aid делает ровно это внутри.
Починка кодировки в Excel
Excel на Windows: Данные → Из текста/CSV → Источник файла → выбрать '65001: Unicode (UTF-8)'. Excel на Mac: Файл → Импорт → CSV → установить кодировку.
Трюк с BOM: если добавить UTF-8 BOM (EF BB BF) в начало файла — Excel автоматически определит как UTF-8. CSV First Aid может добавить BOM при экспорте для совместимости с Excel.
Best practices
Всегда экспортируйте как UTF-8. Всегда явно указывайте кодировку при чтении (не полагайтесь на дефолты). Всегда валидируйте после конверсии — откройте файл и проверьте, что символы с акцентами отображаются правильно.
Если сомневаетесь — прогоните файл через CSV First Aid. Он определяет кодировку, конвертирует в UTF-8 и убирает BOM за один шаг.
Не хочется гадать с флагами chardet или iconv? CSV First Aid делает определение за вас.
Почините CSV сейчас →Похожие инструменты
Починить кодировку CSV
Видите é, ü, ö вместо é, ü, ö? Файл сохранили в одной кодировке, прочитали в другой. Мы определяем, в какой именно, и конвертируем в UTF-8 — Müller снова выглядит как Müller.
Убрать UTF-8 BOM из CSV
Первая колонка выглядит как 'ID' вместо 'ID'? Это UTF-8 BOM — три невидимых байта, которые оставляет большинство экспортёров. Мы их срезаем, и заголовок снова читается чисто.
Убрать невидимые символы из CSV
NBSP, zero-width joiners, залётные control-байты — вы их не видите в Excel, но VLOOKUP видит и не матчит. Сканируем каждую ячейку и убираем то, чего не должно быть.