3

我正在尝试制作一个将日文片假名转换为罗马字(“シ”为“shi”)的脚本。这是我正在尝试的:

x = u''
x = raw_input('Enter katakana: ')
x = x.replace(u'\u30B7', u'shi')

输入片假名:シ<br> UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)

只要我的脚本中的 unicode 写为 u'\u30B7' 而不是 シ,它应该能够处理它,对吧?

4

1 回答 1

8

raw_input以字节编码形式返回输入的字符串,该形式因使用的终端而异。尝试首先将输入显式解码为 Unicode:

import sys
x = raw_input('Enter katakana: ').decode(sys.stdin.encoding)

您得到的错误是由于替换试图x通过默认ascii编解码器天真地将字节编码转换为 Unicode。

于 2012-11-25T23:16:21.523 回答