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

4 投票
3 回答
6476 浏览
提问于 2025-04-15 12:15

这个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')

撰写回答