Фон
Я делаю работу для кого-то, кто занимался загрузкой ~ 123 000 судебных решений правительства США, которые хранятся в виде текстовых файлов (.txt), которые, как правило, кодируются в формате Windows 1252, нопо-видимому, иногда кодируется в формате LE BOM UCS-2 (в соответствии с Notepad ++).Они также могут иногда использовать другие форматы;Я не понял, как быстро получить полный список.
Проблема
Эта изменчивость в кодировке мешает мне исследовать файлы UCS-2 с помощью Python.
Мне нужен быстрый способ конвертировать все файлы в UTF-8, независимо от их исходной кодировки.
У меня есть доступ как к машине с Linux, так и к Windows, поэтому я могу использовать решения, специфичные длялибо ОС.
То, что я пробовал
Я пытался использовать библиотеку Python cchardet
, но она не так хороша для определения кодировки, как Notepad ++, как библиотекаговорит мне, что определенный файл использует кодировку Windows-1252, когда Notepad ++ говорит, что фактически использует кодировку LE UCS-2.
import os
import re
import cchardet
def print_the_encodings_used_by_all_files_in_a_directory():
path_to_cases = '<fill this in>'
encodings = set()
detector = cchardet.UniversalDetector()
for index, filename in enumerate(os.listdir(path_to_cases)):
path_to_file = os.path.join(path_to_cases, filename)
detector.reset()
with open(path_to_file, 'rb') as infile:
for line in infile.readlines():
detector.feed(line)
if detector.done:
break
detector.close()
encodings.add(detector.result['encoding'])
print(encodings)
Вот что показывает шестнадцатеричный редактор в виде первых двух байтоврассматриваемый файл: