python中使用了str()方法后,没法正常显示中文

huangzebiao007 2014-05-28 02:04:06
python中使用了str()方法后,如果不是字符串的话,就没法正常保持中文:如下

dicts = {"a":"中文","b":1}
print str(dicts)
lists = ["中文","a"]
print str(lists)
str3 = "中文"
print str(str3)


输出结果是:
{'a': '\xe4\xb8\xad\xe6\x96\x87', 'b': 1}
['\xe4\xb8\xad\xe6\x96\x87', 'a']
中文

如果我要输出的是{"a":"中文","b":1}这种正常保持中文格式的有什么办法实现
...全文
1115 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
panghuhu250 2014-05-28
  • 打赏
  • 举报
回复
1. "中文"前应该有u,否则,a['a']的值本来就是byte string(len(a['a']是6而不是2),用str表示就是\e4...

In [214]: dicts = {"a":u"中文","b":1}

In [215]: print unicode(dicts)
{'a': u'\u4e2d\u6587', 'b': 1}

In [216]: str(dicts)
Out[216]: "{'a': u'\\u4e2d\\u6587', 'b': 1}"

In [217]: print str(dicts)
{'a': u'\u4e2d\u6587', 'b': 1}
2. 如果\u4e2d这样的表示还不够的话,可以定义自己的__unicode__方法。下面是个简单的例子,你可以按自己的需要定义更复杂的方法。

In [231]: class CustomeUnicode(dict):
     ...:     def __unicode__(self):
     ...:         return '{' + ','.join(unicode(k)+':'+unicode(v) for k, v in self.items()) + '}'

In [232]: dicts2 = CustomeUnicode(dicts)

In [233]: print unicode(dicts2)
{a:中文,b:1}

In [234]: print str(dicts2)
{'a': u'\u4e2d\u6587', 'b': 1}
3. 最后,不知道你要用它干什么,我觉得str的作用基本上就是打印出来看看。要想保存object,以备以后恢复,前面几位推荐的json,repr,以及pickle等更有用。而打印出来看看的话,json.dumps也很好了。所以不建议使用2中提到的办法。
ImN1 2014-05-28
  • 打赏
  • 举报
回复
repr(a)
The_Third_Wave 2014-05-28
  • 打赏
  • 举报
回复
引用 3 楼 huangzebiao007 的回复:
[quote=引用 2 楼 u013171165 的回复:] 利用json模块!
>>> a = {"a":"中文","b":1}
>>> import json
>>> print json.dumps(a, encoding="gb2312", ensure_ascii=False)
{"a": "中文", "b": 1}
>>> 
我的blog:http://blog.csdn.net/zhanh1218/article/details/26009329
感谢你的回复,但是这里有个问题是: 如果是a = {1:"中文","b":1}这样的话,转换出来的结果就是{"1": "中文", "b": 1},由于json的key是需要字符串的,所有所有的键都被当成是字符串了,跟我的需求有差别,所以请问除了这种还有没其他的解决方法可以直接生成{1:"中文","b":1}的[/quote] 这个我暂时还真没其他办法, 因为涉及到编解码,很复杂,现成的东西暂时还真没发现,可能需要自己写吧。你这个需求很特别。。。
huangzebiao007 2014-05-28
  • 打赏
  • 举报
回复
引用 2 楼 u013171165 的回复:
利用json模块!
>>> a = {"a":"中文","b":1}
>>> import json
>>> print json.dumps(a, encoding="gb2312", ensure_ascii=False)
{"a": "中文", "b": 1}
>>> 
我的blog:http://blog.csdn.net/zhanh1218/article/details/26009329
感谢你的回复,但是这里有个问题是: 如果是a = {1:"中文","b":1}这样的话,转换出来的结果就是{"1": "中文", "b": 1},由于json的key是需要字符串的,所有所有的键都被当成是字符串了,跟我的需求有差别,所以请问除了这种还有没其他的解决方法可以直接生成{1:"中文","b":1}的
The_Third_Wave 2014-05-28
  • 打赏
  • 举报
回复
利用json模块!
>>> a = {"a":"中文","b":1}
>>> import json
>>> print json.dumps(a, encoding="gb2312", ensure_ascii=False)
{"a": "中文", "b": 1}
>>>

我的blog:http://blog.csdn.net/zhanh1218/article/details/26009329
huangzebiao007 2014-05-28
  • 打赏
  • 举报
回复
补充下,上面代码中的头部有下面的标记了: # -*- coding: UTF-8 -*-

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧