记录一下python2.7中文数组传入json的问题

标签: python2.7 编码


python中遇到的至少三分之一的问题,都是编码问题,而且这种问题呀,看起来是小问题,好像只剩这一个bug,整个项目就成功了,但是这一个bug就是要搞到你吐血。

这里记录一下我的问题吧。

我的需求是先用python得到一个中文列表,然后传给前端json用于显示一个图表。

先用python得到一个包含一堆中文名的列表,例如:

xiaoxiurong = ['肖秀荣','肖老师','肖大大','肖四','肖八','肖4','肖8']

直接print xiaoxiurong,立马报错:

SyntaxError: Non-ASCII character '\xe6' in file F:/Python study/xxxxx.py on line 29, but no encoding declared;

这个是python2.7特有的一个问题,按照网上的经验,在文件第一行加上:

# -*- coding: utf-8 -*

即可,再次打印,结果:

['\xe8\x82\x96\xe7\xa7\x80\xe8\x8d\xa3', '\xe8\x82\x96\xe8\x80\x81\xe5\xb8\x88', '\xe8\x82\x96\xe5\xa4\xa7\xe5\xa4\xa7', '\xe8\x82\x96\xe5\x9b\x9b', '\xe8\x82\x96\xe5\x85\xab', '\xe8\x82\x964', '\xe8\x82\x968']

打印出来了,但是乱七八糟的,不过似乎不是乱码,因为如果我用循环遍历出每一个元素的时候:

for each in xiaoxiurong:
    pring each

结果显示的是正常的中文:

肖秀荣
肖老师
肖大大
肖四
肖八
肖4
肖8

但是,这不是我想要的结果,因为接下来我需要把xiaoxiurong这个列表转化为字符串,然后传给json,这样的话传给json的就是一串符号了,不是汉字,可以看看:

print str(xiaoxiurong)

结果:

['\xe8\x82\x96\xe7\xa7\x80\xe8\x8d\xa3', '\xe8\x82\x96\xe8\x80\x81\xe5\xb8\x88', '\xe8\x82\x96\xe5\xa4\xa7\xe5\xa4\xa7', '\xe8\x82\x96\xe5\x9b\x9b', '\xe8\x82\x96\xe5\x85\xab', '\xe8\x82\x964', '\xe8\x82\x968']

注意,上面的不是一个列表,而是一个纯字符串!是“str”。

于是,我又在网上找啊找,找到一个方法:

import json
print json.dumps(xiaoxiurong,ensure_ascii=False)

用json包直接把列表转换成json字符串,同时把编码准换一下。打印结果:

["肖秀荣", "肖老师", "肖大大", "肖四", "肖八", "肖4", "肖8"]

诶!好了!这就是我要的结果嘛!

终于可以了,接下来就是把这个字符串传递给json了。

但是又出现了一个新的问题,传给json后,前端页面显示不出来了!
去页面上查看了一下源代码,发现传过去的json变样了:

["何凯文", "张剑", "商志", "朱伟", "王江涛", "李剑", "唐迟", "刘一男", "陈正康"]

(我传过去的不是xiaoxiurong的那个列表了,换了一个)
问题出来,json似乎把我本来是字符串里面的双引号,全部都转码了!
这可能是一个常见的保护措施吧。

于是又查了查资料,这种问题在SQL语句中也出现的比较多,执行SQL语句的时候,也常常会把我们想放进数据库的一些字符给自动转码了,这个时候一般用数据库的escape_string方法来处理,就是防止自动转码。

这里的话,我是用flask框架在搭建web,因此可以直接使用flask提供的safe过滤器来处理,在我传入前端的数据中,后面加上一个 |safe 即可。如:

data:{{ math_rank[1]|safe }}

这样,数据就可以正常展示了!

终于大功告成!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第六章:数字 第七章:序列,列表,元组 1.序列 序列类型有着相同的访问模式:它的每一个元素可以通过指定一个偏移量...
    m风满楼阅读 938评论 0 2
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 19,182评论 17 410
  • GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常丰富,涉及面非常广。awesome-p...
    若与阅读 18,917评论 4 418
  • 今天又是晚上九点以后才有了属于自己支配的时间,出游回来后从网上买的东西前几天就到了,只是一直没有时间拆开来看。 ...
    绿窗幽梦阅读 315评论 2 2
  • 。。。。。。 但是,沒想到,我跟這位大碗的梁子,就這麼結下了。後來我們又見過三次,都是在培訓項目中遇到。我總是試圖...
    MABEL梅阅读 204评论 0 0