美文网首页
python2中的编码问题

python2中的编码问题

作者: 掀开绿罗裙 | 来源:发表于2017-04-11 21:24 被阅读0次

    最近爬js渲染网页,提取json格式内容的时候。忽然发现写入本地时内容全是带‘u'的字符串码,print输出依然是带u的串码,encode(“utf-8”),则会报UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-16: ordinal not in range(128)错误

    网上看相关的blog,发下大家都是

    import sys

    reload(sys)

    sys.setdefaultencoding("utf-8")

    这样强制将系统默认编码格式转换成utf-8确实能解决print的问题。

    但是,写入文件还是不行。

    再有,在百度知道上看到有人修改python安装目录下lib文件夹下的site.py,我觉得这样更加得不偿失。

    于是疯狂在网上搜索找答案,终于在stackoverflow上看到相似的问题。回答者说,出现这个问题的主要原因是python解释器默认是asiic编码,如果要在print上输出,则需解码成unicode。还建议提问者去看howto unicode官方文档。

    于是我上车看howto unicode。

    文档是这样说的:

    原来,解释器默认编码都是asiic,如果使用print输出特殊编码的字符,则需要先将编码解码成unicode,这样解释器print的时候会自动将编码转换成合适的编码格式。

    如果要写入文件,那要先解码unicode,在编码成UTF-8

    如:

    >>>a="\u8d1f\u8d23\u4eba"

    >>>a

    >>>'\\u8d1f\\u8d23\\u4eba'

    >>>print a

    >>>\u8d1f\u8d23\u4eba

    >>>>>> a=a.decode("unicode-escape")#反编码成unicode码

    >>> a

    u'\u8d1f\u8d23\u4eba'

    >>> print a

    负责人

    print 输出的时候会自动解码

    但是当我们要写入文件的时候呢

    >>> fname="test.txt"

    >>> f=open(fname,'w')

    >>> f.write(a)

    Traceback (most recent call last):  File "", line 1, inf.write(a)

    UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-11: ordinal not in range(128

    这时就需要先转码了

    >>> f.write(a.encode("utf-8"))

    查看文件写入的内容:

    相关文章

      网友评论

          本文标题:python2中的编码问题

          本文链接:https://www.haomeiwen.com/subject/hcmuattx.html