2011-11-26 122 views
1

我有以下问题。如果我在Eclipse中运行我的应用程序它工作正常,但是当我在独立debuger运行它 - 我有以下错误:奇怪的unicode问题

UnicodeEncodeError: 'ascii' codec can't encode character u'\u0144' in position 7: ordinal not in range(128)

我怎样才能解决呢?

我的代码片段:

x = x.replace("Ł", "L") 
+0

在print'type(x),repr(x)';前面加上你的片段。告诉我们结果 –

回答

3

猜测的基础上,提供(不足)的信息:

你正在运行的Python 2.x版本

[猜] xstr对象。

[猜测] Eclipse将默认编码设置为UTF-8。

“标准调试器”将默认编码设置为ascii。

结果:图示。

解决方案(与Unicode的工作标准作业程序):

  • 在输入时,将所有str对象'万国码。
  • 使用Unicode。
  • 在输出上,使用输出的消费者期望的任何编码对所有对象进行编码。

重要更新其实如果x是UTF-8编码的str对象,你应该得到的消息像UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 7: etc etc

请注意,您的实际错误消息表示UnicodeEncodeError: 'ascii' codec can't encode character u'\u0144' in position 7: etc etc这表明无论它抱怨的是(a)一个unicode对象(b)至少8个字符长。但是你实际上说x不是unicode对象(否则x.decode('utf8')会失败),另外两个replace的参数只有1个字符长。因此我们不可能。

为了帮助解决此问题:

print type(x), repr(x) # for Python 2.x 
Lstroke = "Ł" 
print type(Lstroke), repr(Lstroke) 
y = x.replace(Lstroke, 'L') 

和编辑您的问题,说明你跑的实际代码加上完整的错误信息和回溯

顺便说一句:u'\ u0144'是拉丁字母小写字母N;这个信息有帮助吗?

+0

通过执行x = x.decode('utf-8')解决之前,谢谢 – Djent

2

尝试添加# -*- coding: utf-8 -*-到文件的顶部,使Python解释其意识到编码的文件使用,在我的例子UTF-8。您也可以通过使用BOM标题保存文件来完成此操作。不知道Eclipse如何提示编码,但他们可能以某种方式使用sys.setdefaultencoding()

您可以在Python手册中阅读有关source code encoding的更多详细信息。

+0

在第一行得到了编码,eclipse和python debuger中的代码是相同的 – Djent

+1

您必须确保'coding:'行匹配编辑器保存文件的实际编码。或者更好的是,用'“\ x ??”'替换那个非ascii字符?是你的'x'变量编码中的十六进制字符代码。 – yak