python:pymssql查询结果集合中部分中文乱码处理

发布时间:2020-10-31 PYTHON 数据库 BUG 乱码 JAVA

python:pymssql查询结果中文乱码处理

1、背景描述

有个任务是用python去sqlserver捞数据(数据库连接编码是utf8),用到了多库多表查询,然后有部分返回值是写死的,就像这样select "人名币" as "币种",然后又因为两个库的编码格式不一样,最后导致,查出来的数据,部分乱码,乱码不是那种16进制的,比如这样b\xe4\xb8\xad,而是这种的真中文乱码,就像这样æ:°×ÁÖ¡¢±»,好了,这是背景。

2、乱码原因

  • 多库多表查询,然后有部分返回值是写死的,就像这样select "人名币" as "币种"
  • 两个库的编码格式不一样

3、我的问题和其他博客的对比

  • 从百度找到了google,最终得出的解决方案是这样的。

乱码的地方加上.encode(‘latin1’).decode(‘gbk’),先编码成SQL server支持的编码格式,再解码成中文。

  • 大概是这样的用法
"æ:°×ÁÖ¡¢±»".encode(‘latin1’).decode(‘gbk’)

这样就会输出中文了。

  • 但是
  • 但是
  • 但是
  • 我的是一个集合,集合里面而且是部分这种的乱码,其他的格式有数字,有时间,有其他正确的中文。这种循环集合然后编码,会出现报错,总之就是会遇到无法编码的情况。

4、我的解决方案

.encode(‘latin1’)等价于.encode(‘l1’)

  • 先贴代码
@staticmethod
    def cn_garbled_code(resList):
        """
            数据库返回中文乱码问题解决,进来一个list进行处理
        """
        target_list = []
        target_index = 0
        for item in resList:
            target_list.insert(target_index,list(item))
            target_index+=1
        
        for item in target_list:
            for item1 in item:
                if type(item1) is str:
                    try:
                        if(chardet.detect(item1.encode('l1'))['encoding'] != 'ascii'):
                            # print(item1.encode('l1').decode("GBK"))
                            item_index = target_list.index(item)
                            item1_index = item.index(item1)
                            target_list[item_index][item1_index] = item1.encode("l1").decode("GBK")
                    except UnicodeEncodeError:
                        # print("不用编码")
                        pass
        return target_list
  • 核心代码
try:
    if(chardet.detect(item1.encode('l1'))['encoding'] != 'ascii'):
        # print(item1.encode('l1').decode("GBK"))
        item_index = target_list.index(item)
        item1_index = item.index(item1)
        target_list[item_index][item1_index] = item1.encode("l1").decode("GBK")
except UnicodeEncodeError:
    # print("不用编码")
    pass
  • 配合异常捕获
    如果遇到无法编码的异常,就跳过,继续循环下去.

5、总结

  • .encode(‘latin1’).decode(‘gbk’)
  • .encode(‘latin1’)等价于.encode(‘l1’)
  • 配合异常捕获

Q.E.D.

更多相关推荐


手机连接电脑只能充电怎么回事

发布时间:2021-09-30 PYTHON 方式 做法 工作
本答案提供苹果、华为、小米三种系统的解决方案,三种系统手机连接电脑只能充电的原因不同,以下为大家介绍:华为手机可能是没有打开USB调试。1、进入关于手机打开手机里的设置,然后再点击关于手机。2、将开发人员选项打开连续点几次版本号,将开发人员选项打开。3、点开发人员选项回到设置菜单,点开发人员选项。4、打开USB调试在页面里打开USB调试,在弹出的页面里选择确定。苹果手机可能是AppleMobile...

7.ajax能post不能返回问题

发布时间:2016-11-08 PYTHON
2019独角兽企业重金招聘Python工程师标准>>>$.ajax({async:true,type:"POST",url:"127.0.0.1:8888",data:ss,dataType:"json",success:function(data){alert(1);}200成功没反映。来具体分析以下。好奇怪。。。偶尔会出。先好好学下AJAX吧。 转载于:https://my....

安装python时候的一些问题

发布时间:2021-09-11 UBUNTU PYTHON LINUX
以下开始阐述1、linux下用vi,vim编辑时退出编辑模式(wq)无法保存退出 解决方法:退出编辑模式回到一般模式后,shift+z连续操作两次,就可以保存vi编辑的内容退出了2、 root@ubuntu:/#与root@ubuntu:~#区别:root@ubuntu:/#这个是根目录,对一般用户只读,root用户有所有权限root@ubuntu:~#这个是home目录,每个非root用户都会有...

Fatal error in launcher: Unable to create process using '"'

发布时间:2018-10-23 PYTHON
1.cmd上运行pip后,出现这个Fatalerrorinlauncher:Unabletocreateprocessusing'"'  原因:计算机的环境变量中找不到python,找不到pip。肯定是之前装过很多个python版本造成的。 解决:path环境变量中python.exe不要设置成别的名字,pip会找python.exe转载于:https://www.cnblogs.com/whyl...

python多线程爬虫爬取斗图啦网站表情包图片

发布时间:2020-06-06 多线程 PYTHON 队列 爬虫 XPATH
如题:这次来个真正的多线程版本。估计也没人看,如果有感兴趣的或者不懂的可以留言。有目前正在学爬虫的也可以交流。importthreadingimportrequestsfromlxmlimportetreeimporturllibimportrefromqueueimportQueuepath='D:/壁纸/python/斗图啦-多线程版本/'#设置图片的存储路径classProducer(thr...

conda虚拟环境中的第三方包的安装,用conda还是pip? python虚拟环境安装第三方库之后仍提示没有该库?

发布时间:2019-11-20 PYTHON
1.事情经过学习了在anaconda中创建虚拟环境之后(可以创建任意现有版本的python),自己着手创建了一个python3.5的虚拟环境(可以通过三种方式)。但是,在安装keras等第三方包的时候出现了问题。1一开始,我是在如下路径中利用pip安装第三方库,但失败了。原因,没有在指向虚拟环境的路径中安装。下图中base表示原主体python版本(描述的不专业,见谅)2后来,利用代码activa...

多线程爬取中国土地市场网土地交易数据,最新2020/08/21

发布时间:2020-08-21 MYSQL PYTHON 爬虫
多线程爬取中国土地市场网土地交易数据可自动通过验证码(识别准确率不太高,所以设置了6次的重试机制,如果没事识别出来可自动重新识别,一般2-3次。),爬取网页过程中断可自动重试并继续爬取(因为增加了爬取中断处理,导致代码很长)6月份弄好的,2020.08.21测试了,依然行得通欢迎讨论实现方法尝试很多方法之后最终使用了如下方案:爬取数据:selenium+Chrome(此方法速度不快,也吃cpu,但...

Qt5+MySQL 插入中文乱码解决方案

发布时间:2021-06-02 MYSQL 乱码 数据库 QT
1.查看是否有mysql驱动,有输出MYSQL则有; QStringListdrivers=QSqlDatabase::drivers(); foreach(QStringdvr,drivers)  {    qDebug()<<dvr;  }2.有MYSQL驱动后,需要把libmysql.dll放在执行文件处,对应32位和64位,即Qt程序位32位则用32位的libmysql.dll...

关于Fatal error in launcher: Unable to create process using ... 无法进行该进程的解决

发布时间:2020-07-12 PIP PYTHON
使用pip安装包的过程中遇到错误Fatalerrorinlauncher:Unabletocreateprocessusing…无法进行该进程首先考虑pip更新python-mpipinstall-Upip更新成功然后就可以安装包了噢这里还要注意如果是有几个python版本直接用pipinstall也可能会出问题那就用你所要安装的那个python版本进行安装,比如说我要安装在Python3.5里面...

解决python Unable to create process usi两版本共存的情况下

发布时间:2018-06-28 PIP PYTHON PYTHON共存
网上很多不适用于我自己的情况报错说无法的类似无法启动c:python36下的python.exe并且找不到pip3.exe可我为了让python2.7和python3.6共存已经修改过该文件夹下的python.exe为python3.exe下面的方法供大家参考方法一python3-mpipinstall包的名字 前提是:假设你修改了python3.xx的.exe文件为python3这个方法治标不治...

Fatal error in launcher:Unable to create process using

发布时间:2018-08-21 PYTHON
Windows下同时存在Python2和Python3使用pip时系统报错:Fatalerrorinlauncher:Unabletocreateprocessusing'"'的解决方案Windows下Python3和Python2共存环境用pip安装一个包执行pip2installxxx的时候报错Fatalerrorinlauncher:Unabletocreateprocessusing'"'...

selenium-程序指挥浏览器

发布时间:2022-02-15 CHROME PYTHON PYTHON爬虫 SELENIUM
简介一个强大的python库,可以用它控制浏览器,做出打开、输入、点击等动作。selenium中文网中文参考文档优点:1、遇到复杂验证码,如12306网站时,selenium可以让人工介入2、爬取加密复杂的动态网页时,可以等所有动态网页加载完毕,将其当作一个静态网页进行爬取缺点:需要时间和资源安装方法pipinstallselenium#Windows电脑安装seleniumpip3install...

python3.6执行pip3时 Unable to create process using '"'

发布时间:2018-03-06 PYTHON 操作系统
问题需求由于在windows操作系统中已经安装了python2.7,要在安装python3的时候将python3.6安装在C:\Python36目录下然后进入C:\Python36目录下执行pip-V能正常使用但是为了同时再cmd中使用python2和python3,于是将C:\Python36目录下python.exe改名为python3.exe,重新执行pip-V发现错误C:\Python36...

python中使用pip安装模块时,出现:Fatal error in launcher 解决方法

发布时间:2020-04-09 PYTHON
python中使用pip安装模块时,出现:Fatalerrorinlauncher解决方法本人遇到了这个问题,愁了好长时间,参考了好多,最后发现是环境变量的问题。坏境变量设置的太多了。解决办法:1.查看pip命令的路径是否有重复:cmd命令:wherepip,如下确实存在多个路径2.拷贝环境变量path到txt中,去掉不需要的相关路径,保存,重新开个控制台,重新使用pip进行安装①②③点击编辑④选...

Python中使用pip安装报错:Fatal error in launcher... 解决方法

发布时间:2019-12-18 PIP PYTHON 为霞而作
Python中使用pip安装报错:Fatalerrorinlauncher…解决方法前言python安装了2和3版本在cmd中用pip报的错误为:Fatalerrorinlauncher:Unabletocreateprocessusing原因这是因为你安装了python3和python2在你的windows下,并且在环境变量中分别配置了pip,可是并没有区分pip3还是pip2所以你可以用区分P...

Fatal error in launcher: Unable to create process using解决办法

发布时间:2017-02-20 PYTHON
     我的机器是windows764位机器,本来默认安装了pip命令是9.0.1版本的,网上有介绍说可以安装1.5.6版本我考虑将pip更改为1.5.6版本,去官网下载一个whl的文件,利用pip命令安装,提示成功,但是运行pip命令时出错,即为标题所示的错误-Fatalerrorinlauncher:Unabletocreateprocessusing...这种错误就是和普通库的安装错误一样...

解决无法使用Conda创建PyCharm虚拟环境的问题

发布时间:2021-10-27 IDE PYTHON PYCHARM
解决无法使用Conda创建PyCharm虚拟环境的问题用Conda创建虚拟环境时一直显示未连接,报错如下CondaHTTPError:HTTP000CONNECTIONFAILEDforurl本来以为是镜像的问题但使用清华和中科大的镜像后发现都不行,最后搜到这两个镜像服务都关闭了,因此恢复默认镜像,并将https改为http后成功构建。...

Fatal error in launcher: Unable to create process using 'e:\program files\python 3.6.3\python.exe'

发布时间:2018-04-21 FATAL ERROR IN LAUNCHER PYTHON
pip安装库的时候会出现类似的错误.比较奇怪的是,之前都没遇到过这样的问题,直接使用pip命令行安装就可以.我感觉出现这样的问题,应该与自己电脑里面安装了多个python版本有关,之前的版本可能没有卸载干净.或者环境配置的时候,多个版本的环境变量都设置过.如果不指定python版本的话,系统不知道你要调用那个python的pip的命令.错误pipinstallbs4解决办法:python-mpip...

MongoDB导入文件小技巧

发布时间:2021-12-14 NOSQL MONGODB 数据库
今天在用MongoDB导入文件时一直报错2021-12-14T16:23:44.807+0800EQUERY[js]SyntaxError:missing;beforestatement@(shell):1:14有点诡异…查看其它资料后发现应先启动MongoDB,在shell终端进入MongoDB的bin目录进入后在shell端输入(注意是在cmd的shell端!!!不是在mongodb的shel...

软件缺陷

发布时间:2019-07-03 测试 数据库
软件缺陷定义:从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题;从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背与bug的区别:bug指某功能未实现,存在问题;缺陷指的是未满足用户的需求(bug∈ 缺陷)五大缺陷  软件未达到需求规格说明书表明的功能软件出现了需求规格说明书指明不会出现的错误软件的功能超出了需求规格说明书指明的范围(画蛇添足)软件未达到需求规格说...

(已解决)关于Windows下使用pip命令出现“Fatal error in launcher: Unable to create process using”问题的解决

发布时间:2020-07-03 PIP PYTHON
(已解决)关于Windows下使用pip命令出现“Fatalerrorinlauncher:Unabletocreateprocessusing”问题的解决最近想装paddle来学习一下图像识别,然后发现自己之前一直用的32位Python,重装了64位后使用pip命令出现“Fatalerrorinlauncher:Unabletocreateprocessusing”的错误,最后发现了以下两种方法...

解决pip命令无法执行python问题 Unable to create process using....

发布时间:2019-06-05 PIP PYTHON
报错信息:如标题 解决方案:  先删除,再下载删除:Python36\Lib\site-packages\pip-19.1.dist-info删除:Python36\Scripts\pip*.exe  (所有pip开头的)安装:python-mpipinstall--upgradepip  (此处的python是已经配置好的python3) 给python2下载的话,需要将python改为pyth...

黑盒测试 之 测试大纲法

发布时间:2020-08-22 测试 JAVA
一、 应用场合        在一个程序中涉及多个窗口,每个窗口有多个操作,窗口和窗口之间有一定的联系(或者说操作之间的联系),为了弄清它们之间的联系,使用测试大纲法  . 二、 使用测试大纲法分析程序    1、列大纲(提纲)分析需求—列出所有的窗口以及每个窗口包含的操作。            注意:窗口之间的先后顺序。    2、找出窗口和窗口(操作和操作)之间的关系,编写用例。 扩展:  ...

python安装库(离线和在线)

在线:很多时候python下载库失败的原因:1.没有选择国内的源2.选择了国内的源但是没有加速也会升级失败更新pippy –mpipinstall--upgradepip -iSimpleIndex--trusted-hostpypi.douban.compipinstall包-iSimpleIndex--trusted-hostpypi.douban.com离线:1.从离线官网上下载pack包P...

Python学习15_ Python在线和离线安装第三方库

发布时间:2019-03-19 PYTHON
Windows环境:  (1)离线安装      首先在线搜索并下载你需要的第三方库:网址https://pypi.org/project/  安装whl包: pipinstall  **.whl(前提是要安装好pip和wheel)  安装tar.gz包:cd到解压后路径,pythonsetup.pyinstall(安装pip和wheel都可以参照这种方法) 命令窗口cd到指定目录的小技巧:  (...

Python连接mssql数据库乱码(中文变问号)解决方法

发布时间:2015-01-24 PYTHON
以前用php连mssqy时也经常出现中文乱码(中文变问号)的问题,那时就明白是编码没设置好导航,现在的Python连mssql数据库也同样出现这问题,问题一样,解决的办法当然也会相似,现在我们来看看解决方法。  python一直对中文支持的不好,最近老遇到编码问题,而且几乎没有通用的方案来解决这个问题,但是对常见的方法都试过之后,发现还是可以解决的,下面总结了常用的支持中文的编码问题(这些方法中可...

关于Python获取SQLSERVER数据库中文显示乱码问题

发布时间:2016-02-24 PYTHON 乱码
本文发现的问题的原因是由于数据库中的字段的类型问题导致varchar乱码 ncarchar正常解决方案:在select语句中直接通过convert(nvarchar(20),remark)转换即可此问题是:数据库中的数据是ncarchar类型,存的是中文(正常),获取正常,但是目前ncarchar插入数据仍是乱码感谢:梁老师的支持...

Python连接sqlserver中文乱码的问题

发布时间:2014-09-04 PYTHON 数据库
第一次遇到这个问题,Google后才找到解决方法(百度果然还是太弱了啊),编码的问题还是不熟settings={'CMT_SQLSERVER_DSN':'MerchantPrice','CMT_SQLSERVER_USERNAME':'readuser','CMT_SQLSERVER_PASSWD':'password'}conn="DSN=%s;UID=%s;PWD=%s"%(settings[...

python向数据库插入中文乱码问题

发布时间:2015-11-17 PYTHON 数据库 数据库中文乱码
碰到编码问题就头疼啊!。。。。在想数据库中插入中文时候,会出现如下错误提示:Warning:Incorrectstringvalue:'\xE5\x8C\x97\xE4\xBA\xAC...'forcolumn'title'atrow1这个异常主要是由于数据库的字符编码选择错误造成,MySQL的默认编码是Latin1,不支持中文,最好修改为utf8的字符编码为宜!修改后就可以插入中文了。。。。。在...

Python 连接sql server数据库乱码(UnicodeDecodeError)

发布时间:2018-08-15 PYTHON 乱码 GBK SQL SERVER
今天客户运行写好的python程序时,遇到了乱码问题UnicodeDecodeError:'gbk'codeccan'tdecodebyte0xaainposition6:illegalmultibytesequen 乱码问题一直是特别特别头疼的问题,在网上搜索好久,找到一个解决方案,解决方案链接:https://www.jianshu.com/p/e0c95e94275d 大致说下,在连接sql...