我正在尝试编写一个将日本假名转换为罗马字(“シ”转换为“shi”)的脚本。以下是我的尝试: x = u'' x = raw_input('Enter katakana: ') x = x.replace(u'\u30B7', u'shi') 输入片假名:シ Unicode解码错误: 'ascii'编解码器无法在位置0处解码字节0xe3: 该值不在可接受的范围内(128) 只要我在脚本中将unicode写成u'\u30B7'而不是ソ,它就应该可以处理,对吗?
raw_input 返回的字符串是以字节编码形式表示的,具体取决于所使用的终端。尝试先将输入显式地解码为 Unicode 格式: import sys x = raw_input('Enter katakana: ').decode(sys.stdin.encoding) 你得到的错误是由于替换操作尝试通过默认的 ascii 编解码器,将字节编码的 x 转换为 Unicode,导致转换失败。