Python的string.translate()不能完全发挥作用?

时间:2010-06-10 23:59:15

标签: python unicode

鉴于此示例,我得到以下错误:

print u'\2033'.translate({2033:u'd'})

C:\Python26\lib\encodings\cp437.pyc in encode(self, input, errors)
     10
     11     def encode(self,input,errors='strict'):
---> 12         return codecs.charmap_encode(input,errors,encoding_map)
     13
     14     def decode(self,input,errors='strict'):

UnicodeEncodeError: 'charmap' codec can't encode character u'\x83' in position 0

1 个答案:

答案 0 :(得分:6)

请改为尝试:

>>> print u'\u2033'.translate({0x2033:u'd'})
d

由于您使用的是u'\2033'而不是u'\u2033',因此结果是两个字符:u'\203'+u'3'。尝试打印此内容会产生异常,因为您的终端编码不支持字符u'\203'(与u'\x83'相同)。

另请注意字典中20330x2033之间的区别:\uxxxx转义序列的值以十六进制表示,因此您需要0x2033来匹配它

关于您的问题标题,string.translatetranslate模块中的string函数)不支持字典作为参数,但在unicode上调用.translate字符串本身(正如您在问题正文中所做的那样)。