Как определить кодировку файла CSV? - PullRequest
0 голосов
/ 11 февраля 2019

Я пишу сценарий, который должен выполнять некоторые операции с файлом CSV, но я понятия не имею, будет ли файл закодирован с помощью utf-8 или utf-16.Как проверить, если данный CSV-файл не содержит спецификацию utf-16?

1 Ответ

0 голосов
/ 11 февраля 2019

Примечание. Как правило, идентификация исходной кодировки текстового файла не является детерминированной проблемой.Если метаданных нет (например, заголовок типа содержимого HTML), вы можете только догадываться.Существуют инструменты и библиотеки, которые помогут вам угадать - и некоторые из них делают довольно хорошую работу - но вы не можете быть на 100% уверены.Это особенно верно, если задействованы 8-битные кодировки (например, Latin-1, Windows CP1252 и т. Д.).

Но если вы уже знаете, что кодировка должна быть либо UTF-8, либо UTF-16, тогда выВы находитесь в хорошей ситуации.

Текстовые файлы в кодировке UTF-16 всегда должны начинаться с BOM .Вы можете использовать этот факт, чтобы обнаружить его присутствие.Существует два разных «вкуса» UTF-16 - Big Endian (BE) и Low Endian (LE).Поскольку UTF-16 использует двухбайтовые слова (16 бит), их можно составить двумя способами: сначала старшим байтом (BE) или первым младшим байтом (LE).Вы можете сказать из спецификации, т.е.глядя на самые первые два байта файла:

  • FE FF → UTF-16 BE
  • FF FE → UTF-16 LE

Для UTF-8 спецификация строго не нужна - на самом деле ее использование на самом деле нестандартно.Однако тот факт, что многие приложения Windows постоянно отказываются распознавать кодировку UTF-8, если только они не содержат спецификацию, привел к появлению псевдостандарта «UTF-8 с спецификацией».Если спецификация присутствует, она занимает первые три байта файла:

  • EF BB BF → UTF-8 с спецификацией

ЕслиВаш файл начинается с чего-то другого, затем у вас либо кодировка UTF-8 без BOM, либо кодировка не-UTF (ASCII, Latin-1 ...).

...