当前1.3.3版本的pypyodbc在linux系统上面已经可以读取有中文字符的mdb文件,不再出现异常,但是读取的中文字符却全是乱码。

下面是根据一些现象的合理推论:

mdb文件来自于windows系统,其中的中文字符使用GB编码无疑,但linux系统上mdbtools提供的odbc驱动底层已经执行了编码转换,将GB码转换为unicode码,pypyodbc再一次进行转换所以出现了问题。

pypyodbc.connect函数有一个参数unicode_results,在python3版本上默认为True,也就是返回unicode编码的结果集。

odbc底层驱动转换一次编码,pypyodbc再转换一次,悲剧不可避免的出现了。

因此设定connect函数的unicode_results为False,也就是原样返回结果集,然后结果集中的字段名和字段值都需要解码为unicode字符串:

$ python3

>>> conn=pypyodbc.connect('Driver=MDBTools;DBQ=/path/to/Record.mdb', unicode_results=False)

>>> conn.cursor().execute('SELECT * FROM Build').fetchone()[0].decode('UTF-8')

decode(‘UTF-8′)解码成功,说明mdbtools的odbc驱动返回的结果集已经是unicode编码格式。

linux调用odbc接口乱码,linux中pypyodbc读取GB编码mdb中文乱码解决办法相关推荐

  1. mysql json 中文乱码_MySQL对JSON类型UTF-8编码导致中文乱码探讨

    前言 继上文发表之后,结合评论意见并亲自验证最终发现是编码的问题,但是对于字符编码还是有点不解,于是乎,有了本文,我们来学习字符编码,在学习的过程中,我发现对于MySQL中JSON类型的编码导致数据中 ...

  2. Ubuntu Linux 下文件名乱码(无效的编码)的快速解决办法

    Ubuntu Linux 下文件名乱码(无效的编码)的快速解决办法 文件是在WIndows 下创建的,Windows 的文件名中文编码默认为GBK,而Linux中默认文件名编码为UTF8,由于编码 不 ...

  3. Linux下Qt/PyQt5无法调用fcitx中文输入法解决办法

    系统平台:Linux Mint 18.3 xfce 64bit (文末有福利) 博主相关文章: (1)PyQt5练习:结合matplotlib绘图 (2)PyQt5练习:词典翻译 (3)Linux下Q ...

  4. linux日志中有空格,linux中统计排序的内容含有空白行的解决办法

    linux中统计排序的内容含有空白行的解决办法 废话不多说,直接上实例: 文件 sharkyun.log 的内容如下 [root@x201t ~]# cat -n sharkyun.log 1http ...

  5. linux ftp 登录慢,linux中vsftpd登录,上传下载文件慢解决办法linux操作系统 -电脑资料...

    vsftpd登录慢主要是nameserver #定义DNS服务器的IP地址没有设置了,这样我们只要设置或更新一下nameserver即可解决了, 在使用vsftpd的过程中,一直以来都有一个问题就是在 ...

  6. linux远程桌面键盘无法输入,windows远程桌面ubuntu中Tab键不能补全命令的解决办法...

    windows远程桌面ubuntu中Tab键不能补全命令的解决办法 前置 window可以远程ubuntu的前提 参考百度经验即可实现:windows远程桌面ubuntu 正文 在成功登陆远程桌面环境 ...

  7. bpmn如何查看代码 idea_解决idea中Activiti的bpmn编辑器的中文乱码问题

    我使用的是idea2017+activiti6.0版本. 该文章主要是为了解决安装activiti插件后创建的流程模板中文乱码的问题. 1.安装Activiti流程编辑器插件. 1.1网上资料很多,这 ...

  8. ubuntu amd 64bit 安装 QQ for linux教程(附 不能使用中文的解决办法)

    ubuntu amd 64bit 安装 QQ for linux教程(附 不能使用中文的解决办法) Ubuntu 64bit 安装32bit软件 64bit系统构架的先进不由多讲,只是应用程序相对少了 ...

  9. jsp中引入外部js文件发生中文乱码

    jsp中引入外部js文件发生中文乱码 前言 排查 解决问题 前言 我在写作业时发现自己的作业出现中文乱码 排查 我先检查了一番 根据F12找到了span标签的id,在编译器中进行搜索找到找到了语句的所 ...

最新文章

  1. Lambda表达式入门,看这篇就够了!
  2. 中科院DeepMind联手,用深度学习揭示大脑如何识别人脸|Nature子刊
  3. SHELL编程之执行环境----邹立巍的博客
  4. 中缀试转后缀试及前缀试并计算其结果
  5. 死锁终结者:顺序锁和轮询锁!
  6. wordpress模板-单栏多色调全站pajx个人博客模板 idevs主题
  7. Redis学习总结(2)——Java使用Redis
  8. 076 Apache的HBase与cdh的sqoop集成(不建议不同版本之间的集成)
  9. 处理非window设置为window的Owner
  10. Java开发不得不会!java私塾初级模拟银源代码
  11. 实现一个基于XDP/eBPF的学习型网桥
  12. MATLAB常用求导和求偏导函数
  13. 企业微信应用分享(一)
  14. QQ企业邮箱和QQ邮箱之间的区别
  15. 微信小程序实现FBX模型的动画加载
  16. python产品作者如何去掉_python去除\ufeff、\xa0、\u3000
  17. DNSPod十问Neha Naik:以人民币结算海外IT业务的可能性?
  18. React + Redux + Express + Mongodb 零基础开发完整大型商城网站视频教程(97 个视频)
  19. Gateway杂谈:线上引流和灰度发布
  20. 2021河南省高考成绩位次查询,2021年河南高考排名位次查询系统,河南高考排名查询入口...

热门文章

  1. .NET Core快速入门教程 5、使用VS Code进行C#代码调试的技巧
  2. Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制
  3. 申请成为qq互联个人开发者步骤(注意事项)2018
  4. [转]阿里开源低代码引擎LowCodeEngine
  5. 【C#程序设计】教学讲义——第三章:C#语言基础
  6. 【CASS精品教程】南方CASS内业基本作图--野外测记草图法绘制常见地物教程
  7. linux shell之$?和得到联合使用命令的结果
  8. React Native之js调用Android原生使用Callback传递结果给js
  9. linux c之STDIN_FILENO的作用及与stdin的区别
  10. linux网络编程之用socket实现简单客户端和服务端的通信(基于TCP)