linux中pypyodbc读取GB编码mdb中文乱码解决办法

当前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编码格式。

时间: 2024-11-02 23:22:31

linux中pypyodbc读取GB编码mdb中文乱码解决办法的相关文章

数据库 MySQL中文乱码解决办法总结

MySQL中文乱码解决办法 前言: MySQL是我们项目中非常常用的数据型数据库.但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况.下面就来介绍一下如何彻底解决数据库中文乱码情况. 1.中文乱码 1.1.中文乱码 create table user(name varchar(11)); # 创建user表 insert into table user("carl"); # 添加数据 select * from user; insert into user value(&

关于cookie中文乱码解决办法

关于cookie中文乱码解决办法 后台: 存值 (使用 HttpUtility.UrlEncode 进行编码) Response.Cookies("ABC").Value = HttpUtility.UrlEncode("ABC") 取值 (使用 HttpUtility.UrlDecode 进行解码) Str = HttpUtility.UrlDecode(Request.Cookies("ABC").Value) 和JS进行交互: 在用js生成

远程linux中文乱码解决办法

使用xshell登录中文版CentOS或者redhat时,在xshell下如果输出的是中文的话可能会显示乱码,通过如下办法可以有效的解决乱码问题 linux中文乱码解决方法如下: [root@localhost ~]# cd /etc/sysconfig/ [root@localhost sysconfig]# cp i18n i18n.bak #备份i18n文件 [root@localhost sysconfig]# echo "" >i18n [root@localhost

php导出excel中文乱码解决办法总结

1.定义文件名 2.填充Excel数据 这两个过程中可能会出现一些PHP导出Excel乱码问题,下面我来说一下解决办法: 解决Excel内数据的PHP导出Excel乱码: PHP导出Excel乱码原因:网页编码与Excel编码不一致. 解决办法:既然编码不一致,那让其一致了就OK了.定义Excel的字符集:  代码如下 复制代码 header("Content-Type: application/vnd.ms-excel; charset=UTF-8″) ,看到charset=UTF-8了吧,让

Cocos2d-x框架中中文乱码解决办法

一.Cocos2d-x中中文无法显示或者显示乱码问题原因有二: 1.指定的字体是否支持,一般不指定字体使用的是系统字体,一般手机的系统字体都会支持中文,除非你使用非常个性的英文字体. 2.文件/文本编码采用utf-8编码(一般使用win txt文本编辑工具新建的文本都不是utf-8.另外sublime3.0对中文也不友好) 二.解决办法 第一点容易,指定中文字体即可 第二点使用工具将文本文件的文件编码改成utf-8即可,推荐使用Nodepad++,可以方便的实现文件编码变化,而且还不会产生乱码.

javascript中encodeURIComponent()函数URI中文乱码解决办法

问题描述 关于encodeURIComponent()函数应用之前在[注意javascript传递url数据的完整]一文有讨论,这里主要是讨论GBK编码的页面使用encodeURIComponent()函数编码URI通过ajax提交中文字符产生乱码的现象. 问题解决 使用encodeURIComponent()函数的目的是编码特殊字符 , / ? : @ & = + $ #,但实际应用中可能并不需要编码中文字符,因此可以编写自定义的函数替代encodeURIComponent()函数. 使 用e

PHP中文乱码解决办法[转]

一.首先是PHP网页的编码 1.     php文件本身的编码与网页的编码应匹配 a.     如果欲使用gb2312编码,那么php要输出头:header("Content-Type: text/html; charset=gb2312"),静态页面添加<meta http-equiv="Content-Type" content="text/html; charset=gb2312">,所有文件的编码格式为ANSI,可用记事本打开

PHP 中文乱码解决办法总结分析_php技巧

一.首先是PHP网页的编码 1. php文件本身的编码与网页的编码应匹配 a. 如果欲使用gb2312编码,那么php要输出头:header("Content-Type: text/html; charset=gb2312″),静态页面添加<meta http-equiv="Content-Type" content="text/html; charset=gb2312″>,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编码为ANSI,覆盖源文

javascript ajax提交数据中文乱码解决办法

一个UTF8页面需要POST数据到GB2312页面,这时中文的编码是按照UTF8提交过去的,GB2312页面无法接收.如何实现,网络搜索了一种很不错的方法,但有缺陷,这里一一说起. 1.FORM标签里加上accept-charset代码,这个能把FORM里的数据自动编码成指定的字符集提交,比如在UTF8页面提交数据到GB2312,代码就是accept-charset="GB2312″,但accept-charset除了IE其他浏览器都支持... 2.这时可以在提交时触发JS,document.c