我在utf-8中编码了以下网址。
url_input = u'https://www.gumtree.com//p/uk-holiday-rentals/1bedroon-flat-\xa3250pw-all-bills-included-/1174092955'
我需要废弃此网页,为此我需要使用以下url_output(不读取unicode)。
url_output=https://www.gumtree.com//p/uk-holiday-rentals/1bedroon-flat-£250pw-all-bills-included-/1174092955
当我打印url_input时,我得到url_output:
print(url_input)
https://www.gumtree.com//p/uk-holiday-rentals/1bedroon-flat-£250pw-all-bills-included-/1174092955
但是我找不到将url_input转换为url_output的方法。根据论坛,print函数在Python 2.7上使用ascii解码,但是ascii不应该读取\xa3
并且url_input.encode('ASCII')
不起作用。
有人知道如何解决这个问题吗? 提前致谢 !
答案 0 :(得分:2)
当您打印url_input
时,您只能获得所需的url_output
,因为您的终端了解UTF-8并且可以正确代表\xa3
。
您可以使用str.encode
对ASCII字符串进行编码,但必须替换(使用?
)或忽略不是ascii的字符:
url_output = url_input.encode("ascii", "replace")
print(url_output)
会打印:
https://www.gumtree.com//p/uk-holiday-rentals/1bedroon-flat-?250pw-all-bills-included-/1174092955
和
url_output = url_input.encode("ascii", "ignore")
print(url_output)
会打印:
https://www.gumtree.com//p/uk-holiday-rentals/1bedroon-flat-250pw-all-bills-included-/1174092955
您无法获取带有£
ascii字符的输出字符串,因为此字符的值大于127。
答案 1 :(得分:1)
经过一些测试,我可以确认服务器接受不同格式的URL:
原始utf8编码的网址:
url_output = url_input.encode('utf8')
%编码的latin1网址
url_output = urllib.quote_plus(url_input.encode('latin1'), '/:')
%编码的utf8网址
url_output = urllib.quote_plus(url_input.encode('utf8'), '/:')
由于原始latin1未被接受并导致错误的URL错误,并且因为在URL中传递非ascii字符可能不安全,我的建议是使用第三种方式。它给出了:
print url_output
https://www.gumtree.com//p/uk-holiday-rentals/1bedroon-flat-%C2%A3250pw-all-bills-included-/1174092955