如何将python对象转换为非ascii字符不变的字符串?

时间:2014-11-13 16:23:23

标签: python string

我有一个像这样的对象:

obj1 = {
    'k1' : 'v1', 
    'k2' : [
        {
            'k21' : '中文字符'
        }
    ]
}

我想将其转换为类似的字符串:

'''{ 'k1' : 'v1', 'k2' : [ { 'k21' : '中文字符' } ] } '''

使用str()给我这个:

'''{'k2': [{'k21': '\xe4\xb8\xad\xe6\x96\x87\xe5\xad\x97\xe7\xac\xa6'}], 'k1': 'v1'}'''

请注意' \ xe4'有四个字符。我猜str()只是调用repr()。

一种解决方案是移动对象的所有键并递归处理它。我想知道有没有其他方法来实现它。比如转换' \ xe4'到'中'或直接将obj1转换为例外结果。

谢谢!

1 个答案:

答案 0 :(得分:1)

与@Cyber​​建议的一样,使用json将是一个选项,如下所示:

import json

In [11]: obj1 = {
    ...:     'k1' : 'v1', 
    ...:     'k2' : [
    ...:         {
    ...:             'k21' : '中文字符'
    ...:         }
    ...:     ]
    ...: }
         # remember to set ensure_ascii=False
In [12]: s = json.dumps(obj1, ensure_ascii=False)

In [13]: print s
{"k2": [{"k21": "中文字符"}], "k1": "v1"}

我在 Python 2.7.8