KOI8-R: 翻译字符串时遇到问题
这个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
根据你看到的错误信息,看来你的终端编码可能设置成了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字符串。
1
试试用 unicode(s, encoding)
这个方法,其中 encoding 是你终端使用的编码方式。
2
s = unicode(s)
默认情况下是期待输入是 ASCII 编码的。你需要告诉它你的输入是什么编码,比如可以写成 s = unicode(s, 'utf-8')
。