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

时间:2015-11-17 04:55:00

标签: python unicode cloud9-ide python-unicode

当我使用默认版本的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

1 个答案:

答案 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")