鉴于此示例,我得到以下错误:
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
答案 0 :(得分:6)
请改为尝试:
>>> print u'\u2033'.translate({0x2033:u'd'})
d
由于您使用的是u'\2033'
而不是u'\u2033'
,因此结果是两个字符:u'\203'+u'3'
。尝试打印此内容会产生异常,因为您的终端编码不支持字符u'\203'
(与u'\x83'
相同)。
另请注意字典中2033
和0x2033
之间的区别:\uxxxx
转义序列的值以十六进制表示,因此您需要0x2033
来匹配它
关于您的问题标题,string.translate
(translate
模块中的string
函数)不支持字典作为参数,但在unicode上调用.translate
字符串本身(正如您在问题正文中所做的那样)。