遇到django中头痛的中文编码问题,大家帮忙看看 - V2EX
iiduce

遇到django中头痛的中文编码问题,大家帮忙看看

  •  1
     
  •   iiduce May 18, 2012 8211 views
    This topic created in 5126 days ago, the information mentioned may be changed or developed.
    好几个小时都没弄好,抓狂了,发出来请大家帮忙看看:

    view文件中:

    tags = ['电视机', '冰箱', '洗衣机']

    输出到模板中显示该变量,浏览器报错:
    'ascii' codec can't decode byte 0xe7 in position 0: ordinal not in range(128)

    我通过调试,发现tags的值为 ['\xe7\x94\xb5\xe8\xa7\x86\xe6\x9c\xba', '\xe5\x86\xb0\xe7\xae\xb1', '\xe6\xb4\x97\xe8\xa1\xa3\xe6\x9c\xba']

    如果变量这样写 tags = [u'电视机', u'冰箱', u'洗衣机']
    浏览器中会直接显示unicode编码:[u'\u7535\u89c6\u673a', u'\u51b0\u7bb1', u'\u6d17\u8863\u673a']

    为了解决编码问题,我做了如下工作:
    1. 确保所有py文件编码均为utf-8,在所有py文件头部添加:#-*- coding: utf-8 -*-
    2. 确保所有模板html文件编码为utf-8,并在html头部声明<meta http-equiv="Content-Type" cOntent="text/html; charset=" />
    3. settings文件中声明LANGUAGE_CODE = 'zh-cn' DEFAULT_CHARSET = 'UTF-8'
    4. 数据库应该也没问题,使用的mongodb,默认使用的就是'utf-8'编码。

    可是还不行,大家帮忙看看哪里出了问题?
    15 replies    1970-01-01 08:00:00 +08:00
    bhuztez
        1
    bhuztez  
       May 18, 2012   1
    tags = [u'电视机', u'冰箱', u'洗衣机']

    说不定就行了
    iiduce
        2
    iiduce  
    OP
       May 18, 2012
    @bhuztez
    我这样试过了,浏览器中会直接显示unicode编码:[u'\u7535\u89c6\u673a', u'\u51b0\u7bb1', u'\u6d17\u8863\u673a'],哎,以前两个django项目没有遇到这个问题啊~
    bhuztez
        3
    bhuztez  
       May 18, 2012
    @iiduce {% for tag in tags %}{{ tag }}{% endfor %}
    iiduce
        4
    iiduce  
    OP
       May 18, 2012
    @bhuztez
    我实际应用的时候是循环输出的(也不能显示中文)。为了方便说明问题,直接输出了列表。
    bhuztez
        5
    bhuztez  
       May 18, 2012   1
    @iiduce 直接输出列表当然是长这样了啊。循环输出 u'XXX' 了应该没问题的。
    iiduce
        6
    iiduce  
    OP
       May 18, 2012
    @bhuztez 现在循环输出真的可以了,感谢+1
    kojp
        7
    kojp  
       May 18, 2012
    哈哈,前一阵我也被折腾得够呛。
    参考此帖http://www.v2ex.com/t/35062
    希望对你有帮助!
    iiduce
        8
    iiduce  
    OP
       May 18, 2012
    @kojp 谢谢,我去看看。 现在还没有搞清楚的是, 在之前项目里 定义中文字符串前没有加u(unicode编码,类似u'冰箱')也是可以的,这回怎么就不行了呢~~
    kojp
        9
    kojp  
       May 18, 2012
    @iiduce 这个,你就别“执着”了。系统环境呀,软件版本呀,数据库环境呀。。各种都会有影响的。
    我上次折腾那么久,大概总结了三点(说好的详细总结其实也没写,下周末写吧,拖延症!!!桑不起)
    1,不管输入什么以什么输入,统一保存成UNICODE。不管什么环境,什么软件,统一成UTF8
    2,LIST和STRING的用法,以及本质了解。
    3,善于使用chardetect, codec,isinstanceof 这之类的内置方法
    ccdjh
        10
    ccdjh  
       May 18, 2012
    可以看一下这个:

    http://yibin.us/archives/6817
    ninjai
        11
    ninjai  
       May 18, 2012
    不要在代码里直接使用 Unicode 字符
    Yan_6
        12
    Yan_6  
       Aug 24, 2012
    #coding=utf-8
    CoX
        13
    CoX  
       Aug 24, 2012
    我也遇到个编码的问题,真的跟系统环境有很大关系。

    http://dl.pycox.com/view/2012/0822/
    这个应用是放在openshift上的,这里有一张中文名的图片,图片是存在dropbox上的。
    我是先取到(openshift)本地,但是在 f=open(filename,'wb') 的时候,因为filename含有中文,一直提示编码错误。

    但是同样的应用代码,在windows上调试一点问题都没有。搞了俩小时没搞定,暂时放弃了。
    YUCOAT
        14
    YUCOAT  
       Aug 25, 2012
    话说上次用Flask遇到过编码问题,我把所有的str用unicode替代之后就OK了,现在我也在用Django,平台是Linux + Python2.7 + Django1.4,目前尚未出现编码问题
    YUCOAT
        15
    YUCOAT  
       Aug 25, 2012
    有时候可以这样:
    t = u'电视机'
    传值的时候可以这样:
    t.decode('UTF-8')
    About     Help     Advertise     Blog     API     FAQ     Solana     3154 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 48ms UTC 12:21 PVG 20:21 LAX 05:21 JFK 08:21
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86