有人知道为什么字符串转换函数会在error =“ignore”传递时抛出异常吗?如何在不抛出错误的情况下将常规Python字符串对象转换为unicode?非常感谢!
python -c "import codecs; codecs.open('tmp', 'wb', encoding='utf8', errors='ignore').write('кошка')"
返回
追溯(最近的呼叫最后):
文件“”,第1行,在中
文件“/usr/lib/python2.6/codecs.py”,第686行,写入
return self.writer.write(data)
文件“/usr/lib/python2.6/codecs.py”,第351行,写入
data,consume = self.encode(object,self.errors)
UnicodeDecodeError:'ascii'编解码器无法解码位置0中的字节0xd0:序数不在范围内(128)
编辑 - 感谢您的回复,但有没有人知道如何转换上面的文字,而不是使用“u”前缀?原因是你当然可以处理一些不稳定的事情:)
答案 0 :(得分:3)
write
方法(在Python 2中)接受一个unicode对象,然后你传递一个str - 所以encode
第351行中的codecs.py
调用首先尝试构建一个unicode对象(使用默认的编解码器'ascii')。修复很简单:将write
调用更改为
write(u'кошка')
u
前缀告诉Python你正在使用Unicode对象,它应该没问题。
答案 1 :(得分:2)
非解决方案(来自问题作者)我刚刚发现:使用python3
python3 -c "import codecs; codecs.open('tmp', 'wb', encoding='utf8', errors='ignore').write('кошка')"
答案 2 :(得分:2)
在Python 2.x中使用 write('кошка'.decode('utf-8')而不是 write('кошка')。
您也可以使用其他编码而不是'utf-8'。
希望它不会引起任何错误...
答案 3 :(得分:1)
问题在这里===>>>>写( 'кошка')
您正在编写一个str对象,收件人期待一个unicode对象,因此它尝试使用默认编码(ascii)将其转换为unicode,当然(?)生成众所周知的(?){{ 1}}
使用这样的编解码器模块的关键是让它将你的 unicode 对象转换成动态的utf8编码 - 所以给它 unicode < / p>
更新如何转换文字或非文字:
unicode_object = literal_or_whatever.decode(“UNKNOWN_ENCODING”)
你知道你的文字是如何编码的吗?你想告诉我们你想要完成什么吗?使用UnicodeDecodeError: 'ascii' codec can't decode byte 0xXX in position 0: ordinal not in range(128)
的一个班轮没有多大帮助; - )