我遇到了以下问题。如果我在eclipse中运行我的应用程序它可以正常工作,但是当我在独立debuger中运行它时 - 我得到了以下错误:
UnicodeEncodeError:'ascii'编解码器无法对位置7中的字符u'\ u0144'进行编码:序数不在范围内(128)
我该如何解决?
我的代码片段:
x = x.replace("Ł", "L")
答案 0 :(得分:3)
猜测,基于(不充分)提供的信息:
您正在运行Python 2.x。
[猜猜] x
是str
个对象。
[猜猜] Eclipse将默认编码设置为UTF-8。
“标准调试器”将默认编码设置为ascii。
结果:splat。
解决方案(使用Unicode的标准操作过程):
str
个对象转换为“unicode”。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
的另外两个args只有1个字符长。因此,我们不可能。
帮助解决此问题:
print type(x), repr(x) # for Python 2.x
Lstroke = "Ł"
print type(Lstroke), repr(Lstroke)
y = x.replace(Lstroke, 'L')
并编辑您的问题以显示您运行的实际代码以及完整错误消息和追溯。
顺便说一下:你'u '144'是拉丁语,小写字母N,有急促的;该信息有帮助吗?
答案 1 :(得分:2)
尝试将# -*- coding: utf-8 -*-
添加到文件的顶部,以使Python解释器知道文件使用的编码,在我的示例中为UTF-8。您也可以通过使用BOM标题保存文件来执行此操作。不确定Eclipse如何暗示编码,但他们可能会以某种方式使用sys.setdefaultencoding()
。
您可以在Python手册中阅读有关source code encoding。
的更多详细信息