Cloud9 Unicode 错误 - 导入系统不起作用

Cloud9 Unicode Error - Import Sys Does Not Work

当我 运行 下面的代码 运行 在 Cloud9 IDE 中使用 [=33] 的默认版本 python 代码时,我收到以下错误=] (2.7.6):

import urllib
artistValue = "Sigur Rós"
artistValueUrl = urllib.quote(artistValue)

SyntaxError: Non-ASCII character '\xc3' in file /home/ubuntu/workspace/test.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

我阅读以适应下面的代码是一种解决方法。

import urllib
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
artistValue = "Sigur Rós"
artistValueUrl = urllib.quote(artistValue)

当我尝试此操作时,出现红色 x 弹出错误,内容为:

Module 'sys' has no 'setdefaultencoding' member"

如果我 运行 代码我仍然得到语法错误。

为什么会这样,我该怎么办?

编辑: 我还尝试了所选答案中的以下内容:

import urllib
print urllib.quote(u"Sigur Rós")

当我 运行 它时,我收到以下错误:

SyntaxError: Non-ASCII character '\xc3' in file /home/ubuntu/workspace/test.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

好吧,这有点奇怪。 Python 解释器应该 SyntaxError 抱怨你的源代码中的非 ASCII 字符,如果你不在脚本的开头 declare an encoding ; 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")