2010-06-10 66 views
0

鉴于这个例子中,我得到下面的错误:Python的string.translate()不能完全工作?

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 

回答

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.translate(在string模块中的translate功能)不支持字典作为参数,但对Unicode字符串本身调用.translate(如你的问题做了身体)的作品。

+0

好的,这是有道理的。我不明白为什么下面的解决方案不适用于2033年。 @stuboverflow.com/posts/2854253/revisions – Rhubarb 2010-06-11 00:39:07

+0

@Rhubarb:如果你指的是解决方案使用'unidecode'和'translate',它适用于我:它用'u'代替'u“\''''' – interjay 2010-06-11 00:58:14

+0

很奇怪,你能发布你使用过的确切代码吗?我从该解决方案得到的副本/版本返回一个空字符串。 – Rhubarb 2010-06-11 01:07:01