如何确定(下载的)字节字符串在python中的编码方式?

k4ymrczo  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(172)

我正试图下载一个文件并将其写入磁盘,但不知何故,我迷失在了编码和解码领域。

from urllib.request import urlopen
url = "http://export.arxiv.org/e-print/supr-con/9608001"
with urllib.request.urlopen(url) as response:
    data = response.read()
    filename = 'test.txt'
    file_ = open(filename, 'wb')
    file_.write(data)
    file_.close()

这里的数据是一个字节字符串。如果我检查文件,我会发现一堆奇怪的字符。我试过了

import chardet
the_encoding = chardet.detect(data)['encoding']

但这一结果一无所获。所以我真的不知道我下载的数据是如何编码的?
如果我只是打字“http://export.arxiv.org/e-print/supr-con/9608001“在浏览器中,它会下载一个我可以用文本编辑器查看的文件,这是一个非常好的.tex文件。

pengsaosao

pengsaosao1#

应用 python-magic 图书馆。 python-magic 是到的python接口 libmagic 文件类型标识库。 libmagic 通过根据预定义的文件类型列表检查其标题来标识文件类型。此功能通过unix命令向命令行公开 file .
注解脚本(适用于windows 10、python 3.8.6):


# stage #1: read raw data from a url

from urllib.request import urlopen
import gzip
url = "http://export.arxiv.org/e-print/supr-con/9608001"
with urlopen(url) as response:
    rawdata = response.read()

# stage #2: detect raw data type by its signature

print("file signature", rawdata[0:2])
import magic
print( magic.from_buffer(rawdata[0:1024]))

# stage #3: decompress raw data and write to a file

data = gzip.decompress(rawdata)
filename = 'test.tex'
file_ = open(filename, 'wb')
file_.write(data)
file_.close()

# stage #4: detect encoding of the data ( == encoding of the written file)

import chardet
print( chardet.detect(data))

结果: .\SO\68307124.py ```
file signature b'\x1f\x8b'
gzip compressed data, was "9608001.tex", last modified: Thu Aug 8 04:57:44 1996, max compression, from Unix
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}

相关问题