urlopen似乎不起作用,这取决于如何生成输入文本

2024-07-05 14:46:37 发布

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

出于某种原因,根据我复制和粘贴url的位置,urllib.request.urlopen不起作用。例如,当我从地址栏复制http://www.google.com/并运行以下脚本时:

from urllib import request

url = "http://www.google.com/"

response = request.urlopen(url)
print(response)

调用urlopen时出现以下错误:

UnicodeEncodeError:“ascii”编解码器无法对位置5中的字符“\ufeff”进行编码:序号不在范围内(128)

但是如果我从网页上的文本中复制url字符串,或者手动键入,它就可以正常工作。说清楚点,这不管用

from urllib import request

url = "http://www.google.com/"

response = request.urlopen(url)
print(response)

#url1 = "http://www.google.com/"
#
#response1 = request.urlopen(url1)
#print(response1)

但事实上:

from urllib import request

#url = "http://www.google.com/"
#
#response = request.urlopen(url)
#print(response)

url1 = "http://www.google.com/"

response1 = request.urlopen(url1)
print(response1)

我怀疑实际地址栏中的编码是不同的,Spyder知道如何处理它,但我不知道,因为我看不到实际发生了什么。你知道吗

编辑:按要求。。。你知道吗

打印(ascii(url)) 'http://www.google.com/\ufeff'

打印(ascii(url1)) 'http://www.google.com/'

事实上,弦是不同的。你知道吗


Tags: fromimportcomhttpurlresponserequestwww
2条回答

\ufeff是一个零宽度的不间断空格,所以难怪你看不到它。是的,你的网址上有一个看不见的字符。至少不是小精灵。你知道吗

你可以试试

from urllib import request

url = "http://www.google.com/"

response = request.urlopen(url.decode("utf-8-sig").replace("\ufeff", ""))
print(response)

Unicode字符是字节顺序标记或BOM(更多信息here),您可以通过使用utf-8-sig解码然后替换有问题的字符来编码而不使用BOM

相关问题 更多 >