关于如何打印集合类型中的中文字符而不是打印出该中文的存储符问题?
请看下面一段示例,我如何才能打印出一个集合类型的中文。
- Python code
>>> k='你好!' #cmd窗口下默认编码gbk>>> print k你好!>>> print repr(k) #该中文的gbk编码存储符'\xc4\xe3\xba\xc3\xa3\xa1'>>> d={'name':'你好!'} #我将此中文赋值给任意一个集合类型数据结构,如dict、list、tuple都可以,在此以dict为例>>> d{'name': '\xc4\xe3\xba\xc3\xa3\xa1'} #字典d的原始存储符>>> print d{'name': '\xc4\xe3\xba\xc3\xa3\xa1'} #我如何才能打印出{'name':'你好!'}?>>>因为这个字典d我是要输出到一个文本文件中去的,利用f.write(str(d))方法,现在的问题是输出到文本文件后汉字就变成了原始字符。。。我又不想输出的时候将集合拆分开然后拼成一个字符串再写入文件,因为存在很多种情况,存在dict、list、tuple类型不说还有多级嵌套,我不想花时间去单独写个算法去处理这个问题,请问有没有好的解决方案。
另外问一句有没有现成的万能转码函数,我只需要给这个函数输入一个已编码过的数据(string、dict、list、tuple类型)和想要转的编码,如utf8,这个函数就能给我转成我想要字符串。
我发现这种需求很多,每次遇到转码的问题都能头疼,用chardet模块查编码方式误判率,还真着实有点高,请各路高手赐教赐教!!!膜拜膜拜!!!
[解决办法]
用keys()和get()函数吧,我也一直没搞懂字典里面的编码,所以一直用这个,把什么变成了字典就把什么变回来。
- Python code
d = {'name':'你好!'}for key in d.keys(): print '{\'%s\',\'%s\'}'%(key,d.get(key))
[解决办法]
受不了,赶紧结贴吧:
- Python code
def fuckingprint(x): import re print re.sub(r'\\x[a-f\d]{2}', lambda c: c.group().decode('string_escape'), repr(x))fuckingprint({'name': '\xc4\xe3\xba\xc3\xa3\xa1'})