2013-01-09 29 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") 

正如你已經做了,即使它沒有在工作第一是正確的事情要做