'请求与本地HTTP适配器会话输出纪姆'

2024-10-04 05:23:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用请求和LocalFileAdapter读取保存在本地磁盘中的HTML文件,如Python requests fetch a file from a local url上的@b1r3k所示。相关部分是:requests_session = requests.session() requests_session.mount('file://', LocalFileAdapter()) ra=requests_session.get('file://X:\somefile.htm') print ra.content。 我在控制台junk上得到一些垃圾。如果你仔细看,它是由这些奇怪的正方形分隔的实际字母表。我能做些什么使它成为人类可读的?你知道吗


Tags: 文件fromurlgetsessionlocalhtmlfetch
1条回答
网友
1楼 · 发布于 2024-10-04 05:23:00

您已经将UTF-16编码的数据和BOM打印到使用Windows 1252代码页的控制台:

>>> contents = u'''\
... <html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head>
... <meta http-equiv="Content-Type" content="text/html; charset=unicode">
... <meta name="ProgId" content="Word.Document">[snip]
... </body></html>'''
>>> contents.encode('utf16').decode('cp1252')
u'\xff\xfe<\x00h\x00t\x00m\x00l\x00 \x00x\x00m\x00l\x00n\x00s\x00:\x00v\x00=\x00"\x00u\x00r\x00n\x00:\x00s\x00c\x00h\x00e\x00m\x00a\x00s\x00-\x00m\x00i\x00c\x00r\x00o\x00s\x00o\x00f\x00t\x00-\x00c\x00o\x00m\x00:\x00v\x00m\x00l\x00"\x00 \x00x\x00m\x00l\x00n\x00s\x00:\x00o\x00=\x00"\x00u\x00r\x00n\x00:\x00s\x00c\x00h\x00e\x00m\x00a\x00s\x00-\x00m\x00i\x00c\x00r\x00o\x00s\x00o\x00f\x00t\x00-\x00c\x00o\x00m\x00:\x00o\x00f\x00f\x00i\x00c\x00e\x00:\x00o\x00f\x00f\x00i\x00c\x00e\x00"\x00 \x00x\x00m\x00l\x00n\x00s\x00:\x00w\x00=\x00"\x00u\x00r\x00n\x00:\x00s\x00c\x00h\x00e\x00m\x00a\x00s\x00-\x00m\x00i\x00c\x00r\x00o\x00s\x00o\x00f\x00t\x00-\x00c\x00o\x00m\x00:\x00o\x00f\x00f\x00i\x00c\x00e\x00:\x00w\x00o\x00r\x00d\x00"\x00 \x00x\x00m\x00l\x00n\x00s\x00:\x00m\x00=\x00"\x00h\x00t\x00t\x00p\x00:\x00/\x00/\x00s\x00c\x00h\x00e\x00m\x00a\x00s\x00.\x00m\x00i\x00c\x00r\x00o\x00s\x00o\x00f\x00t\x00.\x00c\x00o\x00m\x00/\x00o\x00f\x00f\x00i\x00c\x00e\x00/\x002\x000\x000\x004\x00/\x001\x002\x00/\x00o\x00m\x00m\x00l\x00"\x00 \x00x\x00m\x00l\x00n\x00s\x00=\x00"\x00h\x00t\x00t\x00p\x00:\x00/\x00/\x00w\x00w\x00w\x00.\x00w\x003\x00.\x00o\x00r\x00g\x00/\x00T\x00R\x00/\x00R\x00E\x00C\x00-\x00h\x00t\x00m\x00l\x004\x000\x00"\x00>\x00<\x00h\x00e\x00a\x00d\x00>\x00\n\x00<\x00m\x00e\x00t\x00a\x00 \x00h\x00t\x00t\x00p\x00-\x00e\x00q\x00u\x00i\x00v\x00=\x00"\x00C\x00o\x00n\x00t\x00e\x00n\x00t\x00-\x00T\x00y\x00p\x00e\x00"\x00 \x00c\x00o\x00n\x00t\x00e\x00n\x00t\x00=\x00"\x00t\x00e\x00x\x00t\x00/\x00h\x00t\x00m\x00l\x00;\x00 \x00c\x00h\x00a\x00r\x00s\x00e\x00t\x00=\x00u\x00n\x00i\x00c\x00o\x00d\x00e\x00"\x00>\x00\n\x00<\x00m\x00e\x00t\x00a\x00 \x00n\x00a\x00m\x00e\x00=\x00"\x00P\x00r\x00o\x00g\x00I\x00d\x00"\x00 \x00c\x00o\x00n\x00t\x00e\x00n\x00t\x00=\x00"\x00W\x00o\x00r\x00d\x00.\x00D\x00o\x00c\x00u\x00m\x00e\x00n\x00t\x00"\x00>\x00[\x00s\x00n\x00i\x00p\x00]\x00\n\x00<\x00/\x00b\x00o\x00d\x00y\x00>\x00<\x00/\x00h\x00t\x00m\x00l\x00>\x00'
>>> print contents.encode('utf16').decode('cp1252')[:2]
ÿþ

UTF16 byte order mark被打印为ÿþ,Unicode U+00FF和U+00FE码点。你知道吗

解码您的响应数据UTF-16:

print ra.content.decode('utf16')

您可能希望以二进制模式打开文件,否则您的换行将被打断。用途:

with open(file_path, 'rb') as file:

我已经更正了你提到的答案中的密码。你知道吗

相关问题 更多 >