博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python字符decode与encode的问题
阅读量:5345 次
发布时间:2019-06-15

本文共 1071 字,大约阅读时间需要 3 分钟。

同事在工作中遇到一个字符编码的问题;问题是:从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')

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

转载于:https://www.cnblogs.com/yuhan-TB/p/3275332.html

你可能感兴趣的文章
友链大集合
查看>>
ionic3 极光推送
查看>>
DOS基本命令(Windows下的基本命令部分)
查看>>
linux下如何查看命令的绝对路径
查看>>
新闻添加数据
查看>>
融云头像显示
查看>>
基于java过滤器实现的ajax跨域解决方案
查看>>
request鉴权的处理和判断
查看>>
生成凭证-启用多个规则弹出选择框界面
查看>>
Java面向对象实践 ——写飞机大战游戏小项目
查看>>
GoLang基础数据类型--->字典(map)详解
查看>>
[JZOJ P1329] [DP]玩具装箱
查看>>
[cf]
查看>>
JSONObject与JSONArray
查看>>
CSS3实现各种格子纹理效果
查看>>
[Java][Spring][scurity]同步session控制,防止一个用户多次登录
查看>>
linux软件管理之------编译安装nginx服务器并手动编写自动化运行脚本
查看>>
django-manage.py参数
查看>>
动态规划——最长公共子序列(LCS)
查看>>
二叉排序树
查看>>