2013-01-19 30 views
0

我有一个包含隐藏控制字符的行的文件。一个例子行看起来是这样的:解码带有隐藏控制字符的字符串

go!^Mbap^[<80> 

^M^[,并且<80>隐藏字符。当我打印行时,我看不到这些字符。但是,如果我使用repr()函数,我可以看到这些字符表示为\x1b0

如何将这些字符更改为我选择的unicode字符?

我试过使用字符串模块translate()函数和正则表达式,但我似乎无法转换这些隐藏的字符。

+0

你在linux上? – doru

+0

是的,我正在使用Linux机器。 – turtle

回答

0

下面是和(下)unicode.translate如何使用str.translate一个例子:

In [48]: import string 

In [49]: text = 'go!\x1b0' 

In [50]: text.translate(string.maketrans('\x1b\xa0','??')) 
Out[50]: 'go!?0' 

上述命令翻译所有'\x1b''\xa0'为问号。


或者,如果你想翻译一个unicode字符串:

In [55]: text = 'go!\x1b0' 

In [56]: unitext = text.decode('latin-1') 

In [57]: unitext 
Out[57]: u'go!\x1b0' 

In [58]: unitext.translate({ord(u'\x1b'):ord(u'?')}) 
Out[58]: u'go!?0' 

如果你有超过一个性格比较来翻译,它可能是更方便地定义表是这样的:

In [59]: table = dict(zip(map(ord, u'\xb1\xa0'), map(ord, u'??'))) 

In [60]: unitext.translate(table) 
Out[60]: u'go!\x1b0'