zoukankan      html  css  js  c++  java
  • python字符decode与encode的问题

    同事在工作中遇到一个字符编码的问题;问题是:从mysql数据库中读出来的varchar类型数据在python是unicode类型的。

    但他却对这个unicode字符进行了decode,因为他以为读出来的是utf-8(python中的str类型)。程序中报错了。

    但比较奇怪的是,另一个大神同事也做了同样的事情,却没有报错。细细比较代码起来,发现没出错的同事的代码中多了一行

    reload(sys)
    sys.setdefaultencoding('utf-8')

    个人猜测,当python在做decode操作的时候,比如a.decode('utf-8'),如果a不是utf-8类型的,python会自动的试着去将a先转化为utf-8,然后在进行decode;

    同样,当python在做encode操作的时候,比如a.encode('utf-8'),如果a不是unicode类型的,python会自动的试着去将a先转化为uncode类型的,然后再进行encode

    而python在自己自动转化的时候会用什么作为转码标准呢,就是用 defaultencoding里面的编码作为转码标准;

    下面的代码能说明一些这样的问题:

    #coding:utf-8
    import sys

    a = '中文'
    print type(a)

    b = u'中文'
    print type(b)

    reload(sys)
    sys.setdefaultencoding('ascii')

    #print a.encode('gb18030')
    #这个时候报错信息是
    #UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)

    #print b.decode('utf-8')
    # 这个时候的报错信息是
    #UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

    reload(sys)
    sys.setdefaultencoding('utf-8')


    print a.encode('gb18030')

    #这个时候是没问题的。

    print b.decode('utf-8')

    #这个时候也是没问题的。

  • 相关阅读:
    腾讯推出微信企业服务平台风铃
    WAP网页输入框的默认键盘类型控制
    asp.net+扫描仪+图片上传
    Web截屏插件
    java扫描仪上传文件
    web高拍仪图片上传
    网页中怎么实现客户端通过扫描仪把图像传到服务器上
    如何在Web页面里面使用高拍仪扫描上传图像
    B/S选择文件夹上传
    用java实现文件的断点续传并发下载
  • 原文地址:https://www.cnblogs.com/yuhan-TB/p/3275332.html
Copyright © 2011-2022 走看看