Хотя я понимаю, что иногда невозможно определить кодировку файла, я пытаюсь здесь.
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
, потому что было сказано, что он даст вам лучшее определение кодировки файла .