当我使用默认版本的Python(2.7.6)在Cloud9 IDE中运行我的python代码时运行下面的代码时出现以下错误:
import urllib
artistValue = "Sigur Rós"
artistValueUrl = urllib.quote(artistValue)
SyntaxError:非ASCII字符' \ xc3'在第2行的/home/ubuntu/workspace/test.py文件中,但没有声明编码;有关详细信息,请参阅http://www.python.org/peps/pep-0263.html
我阅读以下代码进行调整是一种解决方法。
import urllib
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
artistValue = "Sigur Rós"
artistValueUrl = urllib.quote(artistValue)
当我尝试这个红色x弹出错误时,显示为:
模块' sys'没有' setdefaultencoding'构件"
如果我运行代码,我仍然会得到语法错误。
为什么会这样,我该怎么办?
修改 我还从选定的答案中尝试了以下内容:
import urllib
print urllib.quote(u"Sigur Rós")
当我运行它时,我收到以下错误:
SyntaxError:非ASCII字符' \ xc3'在文件中 /home/ubuntu/workspace/test.py在第2行,但没有声明编码; 有关详细信息,请参阅http://www.python.org/peps/pep-0263.html
答案 0 :(得分:1)
好的,这有点奇怪。如果在脚本开头没有declare an encoding,Python解释器应该给出SyntaxError
抱怨源代码中的非ASCII字符; OTOH,如果已经声明了编码(或Cloud9自动执行),则Python解释器应该将其视为UTF-8编码的字符串。
我不熟悉Cloud9,所以我不能保证这个将工作,但它应该。 :)
使您的字符串成为Unicode字符串(使用u
字符串前缀),然后将其显式编码为UTF-8:
import urllib
artistValue = u"Sigur Rós"
artistValueUrl = urllib.quote(artistValue.encode('utf-8'))
print artistValueUrl
<强>输出强>
Sigur%20R%C3%B3s
修改强>
如果你运行它会发生什么:
# -*- coding: utf-8 -*-
import urllib
print urllib.quote("Sigur Rós")
以下内容应该有效。当然,这不是将这些字符串输入脚本的实用方法,我只是试图了解Cloud9正在做什么。
import urllib
print urllib.quote("Sigur R\xc3\xb3s")
我猜你也可以试试这个,这样我们就可以看到它产生了什么错误信息:
import urllib
print urllib.quote(u"Sigur Rós")