专栏首页python3python与sqlite处理中文字符时

python与sqlite处理中文字符时

   python编码如果把中文数据存储至sqlite数据库某一字段中,再通过查询语句取出并进行相关的字符串操作时,经常会出现错误提示,类似于UnicodeDecodeError,提示某一类型编码不能转换。

    出现这个问题的原因是因为python默认使用unicode处理sqlite3的TEXT类型(varchar类型也是如此,因为在sqlite中varchar其实就是TEXT)。python把中文存入数据库时使用了类似于GBK这样的编码,取出时会尝试把TEXT类型数据转换成unicode,从而出现错误。

    由此导致的另一个不容易发现的错误是存储在数据库中的中文进行了base64之类的编码,在python中取出时不会存在错误,但是再进行base64解码,并与sqlite3中取出的其它text字段进行字符串拼接等处理,就出现编码转换错误,很难发现问题原因,可以把其它text字段进行如'aaa'.encode('gbk')编码成GBK码解决,但不提倡这种方法,更好方法如下:

    解决方法是python连接sqlite数据库后进行如下设置:

conn = sqlite3.connection(“……”)         conn.text_factory = str

    另外为了python代码中硬编码的中文字符串不出现问题,除了在源码开始添加

    # -*- coding:utf-8 -*-  

    还要设置python源码的编码为utf-8

import sys

    reload(sys)

    sys.setdefaultencode('utf8')

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 安装Python For Windows

    可以看到Python现在是有两个版本的,2.x版和3.x版,为什么要选择3.x版本呢?首先,2.x和3.x这两个版本是不兼容的,而随着3.x版本越来越普及,Py...

    用户2475223
  • Python正则表达式匹配换行符

    默认时,Python正则中的.是不能匹配换行符的,如果碰到下面这种带有换行的js字符串该怎么办呢?

    SeanCheney
  • Python每天五分钟-数据类型

    浮点型也就是小数,浮点数对于很大或很小的数值,计算机会以科学记数法进行存储,把10用e来代替,例:1.23e9=1.23x109或者 0.000012=1....

    用户2475223
  • Deepin配置TF GPU环境

    使用conda安装GPU加速版本的TensorFlow时,将自动安装GPU支持所需的CUDA和CuDNN库。不需要再额外安装这些库了。而且与 pip 安装相比,...

    故事尾音
  • python|对Python中函数的学习

    在python中,定义一个函数需要使用def语句,依次写出函数名,括号,括号中的参数和冒号:,接着在缩进后编写函数,函数的返回值用return语句返回。定义函数...

    算法与编程之美
  • Python每天五分钟-变量与常量

    用户2475223
  • Selenium 4 Python的最佳测试框架

    随着Python语言的使用越来越流行,基于Python的测试自动化框架也越来越流行。在项目选择最佳框架时,开发人员和测试人员会有些无法下手。做出选择是应该判断很...

    八音弦
  • Python 中如何实现参数化测试?

    之前,我曾转过一个单元测试框架系列的文章,里面介绍了 unittest、nose/nose2 与 pytest 这三个最受人欢迎的 Python 测试框架。

    Python猫
  • 解决Sublime Text 3:there are no packages available for installation错误

    我们在使用Sublime Text 3 进行编程的时候会使用Package Control安装一些常用的插件帮助我们进行编程 有时候我们在安装插件时会遇到这种...

    用户2475223
  • Python每天五分钟-输入与输出

    计算机程序都是用来服务某个特定任务的,有了输入,用户就可以通过键入不同的信息告知计算机程序该如何处理,有了输出,就可以告知用户程序运行的结果

    用户2475223

扫码关注云+社区

领取腾讯云代金券