最近在做一个项目,是对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. 原型链、构造函数、箭头函数、se6数组去重

    原型链 例子如下: var arr = [1, 2, 3]; 其原型链为:arr ----> Array.prototype ----> Object.prototype ----> ...

  2. asp.net 跨域问题

    asp.net 跨域问题 解决方案1: public void ProcessRequest(HttpContext context) { //解决跨域问题 context.Response.Clea ...

  3. random随机库

    random库是用于产生并运用随机数的标准库 主要包含的有9个随机函数,分别是: seed(), random(), randint(), getrandbits(), randrange(), un ...

  4. JavaWeb+MySql分页封装

    前段时间因为需要所以写一个JavaWeb+MySql的分页封装类,附上代码.技术有限写得不好请多多指教. 1.首先贴上Eneity类 package com.zx.pageUtil; import j ...

  5. nyoj_216_A problem is easy_201312051117

    A  problem is easy 时间限制:1000 ms  |           内存限制:65535 KB 难度:3   描述 When Teddy was a child , he was ...

  6. [bzoj1131][POI2008]Sta_树形dp

    Sta bzoj-1131 POI-2008 题目大意:给定一棵n个点的树,求一个根,使得深度和最大. 注释:$1\le n \le 10^6$. 想法:扭一扭即可. 扭的时候看看这个点当没当过根. ...

  7. 查看当前Java进程工具jps(转)

    jps是JDK提供的一个查看当前Java进程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的缩写.非常简单实用. 命令格式: jps [optio ...

  8. VBox虚拟机与主机(宿主)通讯原理以及socat(套接字猫)简单介绍

    前言 尝试虚拟机使用socat建立服务器端接口转发时,发现对虚拟机接入网络原理不是非常了解,于是乎上网查找资料想搞明白是怎么回事,于是乎有了这篇总结博文.socat可以在服务器端口间建立全双工通信通道 ...

  9. [MongoDB]mongo命令行工具

    1.use dbname 自动创建 2.db.user.find() 空 show collections 空 show dbs 3.db.user.save({name:'',age:20}) db ...

  10. UVA 11825 状态压缩DP+子集思想

    很明显的状态压缩思想了.把全集分组,枚举每个集合的子集,看一个子集是否能覆盖所有的点,若能,则f[s]=max(f[s],f[s^s0]+1).即与差集+1比较. 这种枚举集合的思想还是第一次遇到,果 ...