Как преобразовать кодировку нескольких файлов в UTF-8 независимо от их исходной кодировки? - PullRequest
0 голосов
/ 08 июля 2019

Фон

Я делаю работу для кого-то, кто занимался загрузкой ~ 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)

Вот что показывает шестнадцатеричный редактор в виде первых двух байтоврассматриваемый файл: enter image description here

...