2013-01-09 30 views
1

在Oracle数据库表,我有一些数据的®字符pyodbc返回®为?

pyodbc执行从WinXP的32位和Win7 64相同的查询给出不同的结果

的数据转储到一个文件提供输出为:

Winxp:数据与? #®被替换为?

Win7的:

def dbquery(dbipaddr,dbname,pwd,sid,port,querystr): 
    try: 
     import cx_Oracle 
     conn_str=dbname+"/"+pwd+"@"+dbipaddr+":"+port+"/"+sid 
     conn = cx_Oracle.connect(conn_str) 
     cur=conn.cursor() 
     cur.execute(querystr) 
     queryRes = cur.fetchone() 
     tmp = [] 
     res = [] 

     while queryRes: 
      for res in queryRes: 
       try: 
        tmp = res.read() 
       except: 
        tmp = res 
       tmp.append(tmp) 
      res.append(tuple(tmp)) 
      queryRes = cur.fetchone() 
      tmp = [] 
     conn.close() 

    except Exception, ex: 
     print ex.message 
     return [] 

    return res 
+0

如何将数据转储到文件?这与Windows XP无关 – Esailija

+0

我已经尝试使用各种方法,以文本格式,二进制写入文件,也使用编解码器文件打开,但都给出相同的结果转储它 – avasal

+0

我的意思是你需要显示代码 – Esailija

回答

3

所以这里有故障的2个可能的点:与®#正确的数据

任何想法,什么是WinXP的问题,

查询下面的代码数据,转储到文件时的数据库连接编码和文件编码。 需要指定,否则你是在默认编码的怜悯,这将在不同平台之间变化,可能不是你想要使用的。

要指定数据库的连接编码,做

os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.UTF8' 

指定文件编码做

file = codecs.open("lol", "w", "utf-8") 

正如你已经做了,即使它没有在工作第一是正确的事情要做