KOI8-R:翻译字符串时遇到问题

时间:2009-06-15 11:06:40

标签: python encoding

这个Python脚本对俄语字母进行了转换:

s = u'Код Обмена Информацией, 8 бит'.encode('koi8-r')
print ''.join([chr(ord(c) & 0x7F) for c in s]) # kOD oBMENA iNFORMACIEJ, 8 BIT

有效。但我想修改它以获得用户输入。现在我陷入了困境:

s = raw_input("Enter a string you want to translit: ")

s = unicode(s)
s = s.encode('koi8-r')

print ''.join([chr(ord(c) & 0x7F) for c in s])

结束这个:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)

怎么了?

3 个答案:

答案 0 :(得分:2)

s = unicode(s)默认情况下需要ascii编码。您需要为其提供输入所在的编码,例如s = unicode(s, 'utf-8')

答案 1 :(得分:1)

尝试unicode(s, encoding),其中编码就是您的终端所在。

答案 2 :(得分:0)

查看您看到的错误消息,在我看来您的终端编码可能设置为KOI8-R,在这种情况下,您不需要对输入数据执行任何解码。如果是这种情况,那么您只需要:

>>> s = raw_input("Enter a string you want to translit: ")
>>> print ''.join([chr(ord(c) & 0x7F) for c in s])
kOD oBMENA iNFORMACIEJ, 8 BIT

您可以通过s.decode('koi8-r')仔细检查,这应该会成功并返回等效的unicode字符串。