Пытаетесь зафиксировать кодировку файла журнала, используя UnicodeDammit? - PullRequest
1 голос
/ 15 января 2020

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

Bash

In bash file приводит к: Non-ISO extended-ASCII text, with CRLF line terminators

vim

В Vim команда ex :set fileencoding=? дает: fileencoding=latin1

Если я открою файл нормально (см. Выше), я получу <92> (hex 92); но если открыть файл с помощью :e ++enc=cp1252, я получу .

Я посмотрел в Википедии , и это часть кодовой страницы 1252 a, и эта страница также утверждает, что эта кодовая страница находится в диапазоне 80-9F, поэтому я включил hlsearch, чтобы выделить совпадения ... и когда я выполняю следующие поиски:

/[^\x80-\x9F] появляется, чтобы соответствовать всем символам (я мог ошибаться в этом) поскольку /[\x80-\x9F] не соответствует ни одному!

Так что этот файл не закодирован в cp1252, так как все его символы выходят за пределы этого диапазона.

Python при использовании chardet и Unicode, Черт!

chardet дает Windows -1252

{'encoding': 'Windows-1252', 'confidence': 0.73, 'language': ''}

И я пытался использовать зависимость bs4 UnicodeDammit , чтобы понять это, но он просто возвращает None

# `cwd`: current directory is straightforward
cwd = Path.cwd()
relPath = '../attempt1_no_extra_fields/again/logfile.txt'
mod_path = Path('__file__').parent
file_path = (mod_path / relPath ).resolve()

with open(file_path, 'rb') as dfe:
    detection = chardet.detect(dfe.read())

print('Chardet:', detection)

with open(file_path, encoding=detection['encoding']) as non_unicode_file:
    data = non_unicode_file.read()

dammit = UnicodeDammit(data,["iso-8859-1","latin-1"])


print("dammit.original_encoding:", dammit.original_encoding)

дает:

`dammit.original_encoding: None`

Я обратился к Unicode Dammit, потому что было сказано, что он даст вам лучшее определение кодировки файла .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...