我有以下问题。如果我在Eclipse中运行我的应用程序它工作正常,但是当我在独立debuger运行它 - 我有以下错误:奇怪的unicode问题
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0144' in position 7: ordinal not in range(128)
我怎样才能解决呢?
我的代码片段:
x = x.replace("Ł", "L")
我有以下问题。如果我在Eclipse中运行我的应用程序它工作正常,但是当我在独立debuger运行它 - 我有以下错误:奇怪的unicode问题
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0144' in position 7: ordinal not in range(128)
我怎样才能解决呢?
我的代码片段:
x = x.replace("Ł", "L")
猜测的基础上,提供(不足)的信息:
你正在运行的Python 2.x版本
[猜] x
是str
对象。
[猜测] Eclipse将默认编码设置为UTF-8。
“标准调试器”将默认编码设置为ascii。
结果:图示。
解决方案(与Unicode的工作标准作业程序):
str
对象'万国码。重要更新其实如果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;这个信息有帮助吗?
通过执行x = x.decode('utf-8')解决之前,谢谢 – Djent
尝试添加# -*- coding: utf-8 -*-
到文件的顶部,使Python解释其意识到编码的文件使用,在我的例子UTF-8。您也可以通过使用BOM标题保存文件来完成此操作。不知道Eclipse如何提示编码,但他们可能以某种方式使用sys.setdefaultencoding()
?
您可以在Python手册中阅读有关source code encoding的更多详细信息。
在print'type(x),repr(x)';前面加上你的片段。告诉我们结果 –