奇怪的unicode问题

时间:2011-11-26 19:33:54

标签: python unicode

我遇到了以下问题。如果我在eclipse中运行我的应用程序它可以正常工作,但是当我在独立debuger中运行它时 - 我得到了以下错误:

  

UnicodeEncodeError:'ascii'编解码器无法对位置7中的字符u'\ u0144'进行编码:序数不在范围内(128)

我该如何解决?

我的代码片段:

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

2 个答案:

答案 0 :(得分:3)

猜测,基于(不充分)提供的信息:

您正在运行Python 2.x。

[猜猜] xstr个对象。

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

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

结果:splat。

解决方案(使用Unicode的标准操作过程):

  • 在输入时,将所有str个对象转换为“unicode”。
  • 使用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

的更多详细信息