首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python打印本地html文件的源代码返回空格字符

Python打印本地html文件的源代码返回空格字符
EN

Stack Overflow用户
提问于 2018-06-07 08:20:27
回答 1查看 111关注 0票数 0

我有一个本地html文件,我想读取并提取源代码中的urls。然而,我的正则表达式总是返回空的,所以我尝试打印出源代码,并注意到所有字符都是相互隔开的。你知道原因是什么吗?

下面是我读取文件和正则表达式的代码:

代码语言:javascript
复制
import re
file=open("C:/Documents/name.html",'r')
content=file.read()
match = re.findall(r'<a href="(.*?)".*>(.*)</a>', content)
print(match)

当我尝试打印内容时,我得到了:

代码语言:javascript
复制
< h t m l x m l n s : v = " u r n : s c h e m a s ...

编辑:多亏了abernert,这是一个编码问题,更正后的代码将是:

代码语言:javascript
复制
import re
import codecs
file=codecs.open("C:/Users/140263/Documents/name.html",,encoding='utf-16-le')
content=file.read()
match = re.findall(r'<a href="(.*?)".*>(.*)</a>', content)
print(match)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 08:56:33

问题是您的文件是以UTF-16-LE编码的,但是您读取它时采用的是默认编码,而不是UTF-16-LE。

许多Windows软件使用UTF-16-LE作为文本文件的默认编码-这很烦人,但没有办法。

UTF-16-LE将大多数字符存储为两个字节。对于像<a这样的ASCII码字符,这两个字节是ASCII码字节后跟一个空字节。

因此,如果您将UTF-16-LE读取为ASCII,那么您将得到字符,字符之间有空字节。

通常,您可以通过打印字符串的repr来诊断此问题,而不是打印字符串本身,而不是这样:

代码语言:javascript
复制
< h t m l … >

…你会得到这个:

代码语言:javascript
复制
'<h\0t\0m\0l\0 … >\0'

修复方法是使用正确的编码读取文件:

代码语言:javascript
复制
file = open("C:/Documents/name.html", 'r', encoding='utf-16-le')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50731359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档