最近在做一个项目,是对INFORMIX数据库的数据进行大数据分析,INFORMIX数据库数据有上亿条,没有linux的Root权限和informix数据的生产权限,只能读取。客户要求结果显示在内网windows WEB服务器上,终端通过浏览器来阅读。

我采用python+django+pandas+matplotlib。

首先要做的是:连接数据库并获取数据,其次要创建内网WEB服务,然后实现实时数据分析。

在做第一步时,就遇到INFORMIX的数据汉字编码问题。

现数据采用8859-1字符集,819编码。通过取数据分析,所有汉字为GBK编码的十六进制字符输出。

原生输出肯定为乱码,解决方案:网上能查到的唯一能解决的就是采用JDBC加连接输出控制实现。

我们既然知道出现乱码原因,就可以编程来实现。以下是我在HTML中和Django模板中解决乱码的方法。

一、ASP

<%
var _chrs = new Array();
var _db = new ActiveXObject("ADODB.Connection");
_db.Open("provider = microsoft.jet.oledb.4.0;data source=" + Server.MapPath("\data\\gbkdb.mdb"));
var _rs = new ActiveXObject("ADODB.Recordset");
var _sql="Select * From gbk "
_rs.open(_sql, _db);
var _tempi;
var _tempchr;
while(! (_rs.eof )) {
_tempchr=_rs('GBK').value;
_tempi=parseInt(_tempchr, 16);
_chrs[_tempi]=_rs('CHRS').value;
_rs.movenext;
}
_rs.close();
_db.close();

function gbk2chr(_str){
var _temp="??";
var _xiabiao=parseInt(_str, 16);
if (!((_chrs[_xiabiao]=="undefined")||(_chrs[_xiabiao]==null)))
{_temp=_chrs[_xiabiao]}
return _temp;
}

function tounicode(str){
var tounicode1="";
var len=str.length;
var code1=0;
var code2=0;
var code161="";
var code162="";
var _str1="";
var _temp="";
for(var i=0;i<len;i++){
code1 = str.charCodeAt(i);
code161 = code1.toString(16);
if (code1>159) {
code2 = str.charCodeAt(i+1);
code162 = code2.toString(16);
_str1=code161+code162;
tounicode1=tounicode1+gbk2chr(_str1);
i++
}
else {
tounicode1=tounicode1+code161;
}
}
return tounicode1;
}

%>

数据库后台取数后调用 tounicode()转换一下,即可在HTML页面正确显示汉字。

二、Django(这个要简单些)

def uni2gbk2(_str):

  if type(_str)!=str:
    return _str
  strl=len(_str)
  a=""
  i=0
  while i<strl:
    if ord(_str[i])>128:
    a1=hex(ord(_str[i]))
    a2=hex(ord(_str[i+1]))
    i=i+2
    ab=str(a1)[2:]+str(a2)[2:]
    abb=bytearray.fromhex(ab)
    a=a+abb.decode("gbk")
  else:
    a=a+_str[i]
    i=i+1
  return a

取数后,调用uni2gbk2转换即可

informix 通过ADO或ODBC连接提取数据时出现中文乱码的解决方法的更多相关文章

  1. (转)MySQL 插入数据时,中文乱码问题的解决

    MySQL 插入数据时,中文乱码问题的解决  原文:http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html 当向 MySQL 数据库插 ...

  2. 向hive上传数据时,中文乱码

    sudo -u hive hive -e "use dataplat;load data local inpath '/home/dlht/data/test/2_times.csv' ov ...

  3. MySQL 插入数据时,中文乱码???问题的解决

    在终端,mysql -u root -p 登录: show variables like 'character%'; 来查看当前数据库的相关编码集. client 为客户端使用的字符集. connec ...

  4. php 写入数据到MySQL以及从MySQL获取数据,页面出现乱码的解决方法

    现象如标题. 解决思路: 1确定数据库charset是否是utf-8 a. charset不是utf-8 1, 更改数据库charset为utf-8 ALTER DATABASE db_name DE ...

  5. MySQL 插入数据时,中文乱码问题的解决(转)

    当向 MySQL 数据库插入一条带有中文的数据形如 insert into employee values(null,'张三','female','1995-10-08','2015-11-12',' ...

  6. MySQL 插入数据时,中文乱码问题的解决

    当向 MySQL 数据库插入一条带有中文的数据形如 insert into employee values(null,'张三','female','1995-10-08','2015-11-12',' ...

  7. spark sql 访问hive数据时找不mysql的解决方法

    我尝试着在classpath中加n入mysql的驱动仍不行 解决方法:在启动的时候加入参数--driver-class中加入mysql 驱动 [hadoop@master spark-1.0.1-bi ...

  8. 【原创】@ResponseBody返回json数据时出现中文乱码

    ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 原因: Spring中解析字符串的转换器默认编码格式是ISO-8859-1 public class StringHttpMessageCon ...

  9. Oracle使用PLSQL导入数据后中文乱码的解决方法

    新建环境变量 名:NLS_LANG 值:SIMPLIFIE DCHINESE_CHINA.ZHS16GBK 保存后重启PLSQL Developer 重新导入. 如果还是乱码,将上面8的环境变量值改为 ...

随机推荐

  1. Marshal.ReleaseComObject() vs. Marshal.FinalReleaseComObject()

    很简单,不翻译了. If you are using COM components on your .NET code, you might be already aware of the Marsh ...

  2. 使用Hive的正则解析器RegexSerDe分析nginx日志

    1.环境: hadoop-2.6.0 + apache-hive-1.2.0-bin 2.使用Hive分析nginx日志,站点的訪问日志部分内容为: cat /home/hadoop/hivetest ...

  3. hadoop常见操作命令

    1.查看指定文件夹下内容 hadoop dfs –ls [文件文件夹] eg: hadoop dfs –ls /user/wangkai.pt 2.打开某个已存在文件 hadoop dfs –cat ...

  4. effective C++ 读书笔记 条款11

    条款11: 在operator= 中处理"自我赋值" 在实现operator=时考虑自我赋值是必要的就像 x=y .我们不知道变量x与y代表的值是否为同一个值(把x和y说成是一个指 ...

  5. Codeforces Round #332 (Div. 2)A. Patrick and Shopping 水

    A. Patrick and Shopping   Today Patrick waits for a visit from his friend Spongebob. To prepare for ...

  6. C++虚函数默认实参的注意事项

    我们都知道当成员函数是虚函数的时候,函数调用取决于调用函数的对象的类型而不是指针或者应用的类型.这就是C++中的多态. 那么一个虚函数的实参的缺省值是什么呢?例如如下代码: #include < ...

  7. Android 的Recovery机制【转】

    本文转载自:http://blog.csdn.net/fengying765/article/details/38301895 Android 的Recovery机制 目录 1. 系统的启动模式 1 ...

  8. Android系统Recovery工作原理之使用update.zip升级过程分析(七)---Recovery服务的核心install_package函数【转】

    本文转载自:http://blog.csdn.net/mu0206mu/article/details/7465514 一.       Recovery服务的核心install_package(升级 ...

  9. class--类①

    原来看其他人的代码,发现有好多class之类的语句,当时没太注意.可后来,我觉得应该有学习新知识的必要了. 类定义是以关键字 class 开头,后跟类的名称.类的主体是包含在一对花括号中.类定义后必须 ...

  10. STL 集合部分操作

    3.28更新 在EOJ 1641 集合栈计算机中,使用并集和补集时候,第五个参数使用x.begin()会报错:assignment of read-only location,而使用inserter( ...