奇怪的Unicode问题
我遇到了一个问题。如果我在Eclipse这个开发工具里运行我的应用程序,一切都正常,但当我在独立的调试器中运行时,就出现了以下错误:
Unicode编码错误:'ascii'编码无法在位置7编码字符u'\u0144':序号不在范围内(128)
我该怎么解决这个问题呢?
这是我的代码片段:
x = x.replace("Ł", "L")
2 个回答
3
根据提供的信息,做个猜测:
你正在使用 Python 2.x。
[猜测] x
是一个 str
对象。
[猜测] Eclipse 的默认编码设置为 UTF-8。
而“标准调试器”的默认编码是 ascii。
结果:出错了。
解决方案(处理 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
的另外两个参数只有 1 个字符长。因此,这就形成了一个矛盾。
为了帮助解决这个问题:
print type(x), repr(x) # for Python 2.x
Lstroke = "Ł"
print type(Lstroke), repr(Lstroke)
y = x.replace(Lstroke, 'L')
请编辑你的问题,展示你实际运行的代码以及完整的错误信息 和回溯信息。
顺便说一下:u'\u0144' 是带有重音符的小写字母 n;这个信息有帮助吗?