这个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)
怎么了?
答案 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字符串。