2014-02-16 29 views
2

我想按预期使用urllib.parse.quote,但不能让它工作。我甚至试过文档中给出的例子urllib.parse.quote不会采取utf8

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

+1

什么编码被用于你的源文件?这个错误与'urllib'无关:Python无法首先解析源文件。 –

+0

它也发生在我只使用解释器的时候。所以没有源文件 – KrawallKurt

+1

来自口译员为我工作。可能的错误是你的解释器不确定你的控制台或源文件使用什么编码。 –

回答

1

\xf1latin-1编码ñ

>>> print(b'\xf1'.decode("latin-1")) 
ñ 

..not一个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

+0

我明白了。我的Putty设置为Latin-1,我的文件是ANSI。全部更改为UTF-8,现在可以运行:)非常感谢 – KrawallKurt

0

尝试添加以下行的源代码开始时:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import os, sys 
… 

每默认情况下,蟒蛇假设你的源代码是用ASCII编写的,因此它不能从源文件读取unicode字符串。关于这个话题,请阅读PEP-0263

虽然,如果切换到python3,您不需要在shebang行之后放置那条coding: utf-8注释,因为utf-8 is the default

编辑:刚注意到你实际上正在试图做python3,它应该是utf-8-safe。虽然看着这个错误,但是在我看来你确实在执行python2代码,而你认为​​你正在执行python3。

shebang线正确设置?

你是否用正确的解释器调用脚本?

这里是正确的家当行:

#/usr/bin/env python3 

#/usr/bin/python3 

并不仅仅是/usr/bin/python/usr/bin/env python

你可以给你完整的失败脚本,以及你在你的问题中调用它的方式吗?