最近在做一个项目,是对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. paste deploy初探

    这段时间刚着手开始研究Openstack Swift源码,为后续开发做准备. Swift依据python WSGI规范.WSGI(Web Server Gateway Interface)是Pytho ...

  2. extjs 4 chart 时间轴格式的处理

    var dayStore = Ext.create('Ext.data.JsonStore', { fields: [{ name: 'name', type: 'date', dateFormat: ...

  3. 传染病控制(洛谷 1041 WA 90)

    题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染病,难以准确判别病毒携带 ...

  4. VM 与主机不通的解决方法

    [root@localhost network-scripts]# ping 192.168.1.222 PING 192.168.1.222 (192.168.1.222) 56(84) bytes ...

  5. 机器学习4logistic回归

    对于线性回归.logistic回归,在以前准备学习深度学习的时候看过一点,当时的数学基础有点薄弱,虽然现在还是有点差,当时看到神经网络之后就看不下去了. 不过这次是通过python对logistic回 ...

  6. Python获取当前系统时间

    Python获取当前系统时间 import time #返回当前时间 def GetNowTime():     return time.strftime("%Y-%m-%d %H:%M:% ...

  7. faster-rcnn代码阅读2

    二.训练 接下来回到train.py第160行,通过调用sw.train_model方法进行训练: def train_model(self, max_iters): ""&quo ...

  8. hihoCoder - 1079 - 离散化 (线段树 + 离散化)

    #1079 : 离散化 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi和小Ho在回国之后,又一次过起了朝7晚5的学生生活.当然了.他们还是在一直学习着各种算法 ...

  9. C/C++大小端模式与位域

    一.大端小端: 1.大端:指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中 例如:0x12345678 在内存中的存储为  : 0x0000 0x0001 0x0002 0x00 ...

  10. oc39-- 类的内存存储

    虚线是isa的指向,实线是继承关系. // // main.m // 类的本质 #import <Foundation/Foundation.h> #import "Person ...