我正在尝试按预期使用urllib.parse.quote,但无法让它工作。我甚至尝试过文档中给出的例子
Example: quote('/El Niño/') yields '/El%20Ni%C3%B1o/'.
如果我尝试以下情况发生。
quote('/El Niño/')
File "<stdin>", line 0
^
SyntaxError: 'utf-8' codec can't decode byte 0xf1 in position 13: invalid continuation byte
有人提示有什么不对吗?我使用的是Python 3.2.3
PS:链接到文档http://docs.python.org/3.2/library/urllib.parse.html
答案 0 :(得分:1)
\xf1
是latin-1
编码的ñ
>>> print(b'\xf1'.decode("latin-1"))
ñ
..不是utf-8编码的字符,如Python 3 assumes by default:
>>> print(b'\xf1'.decode("utf-8"))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf1 in position 0: unexpected end of data
意思是,您编写的.py文件或运行Python shell的终端存在编码问题 - 它向Python提供latin-1编码数据,而不是utf-8
答案 1 :(得分:0)
尝试在源代码的开头添加以下行:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, sys
…
默认情况下,python假定您的源代码是用ASCII编写的,因此它无法读取源文件中的unicode字符串。阅读有关该主题的PEP-0263。
但是,如果你切换到python3,你不需要在shebang行之后放置coding: utf-8
评论,因为utf-8 is the default。
编辑:刚刚注意到你实际上是在尝试做python3,它应该是utf-8-safe。虽然看错误,但我认为你实际上正在执行python2代码,而你认为你正在执行python3。
shebang线是否正确设置?
您是否使用正确的口译员调用脚本?
这是正确的shebang线:
#/usr/bin/env python3
或
#/usr/bin/python3
而不只是/usr/bin/python
或/usr/bin/env python
。
你可以提供完整的失败脚本,以及你在问题中调用它的方式吗?