pyodbcreturn®为?

时间:2013-01-09 05:46:25

标签: python unicode windows-xp pyodbc

在oracle db table上,我有一个带有一些数据的字符

pyodbc从WinXP 32bit和Win7 64bit执行相同的查询会得到不同的结果

将数据转储到文件中会将输出显示为:

Winxp:数据有? #?替换为?

Win7:带有#Proper数据的数据

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

以下查询代码:

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

1 个答案:

答案 0 :(得分:3)

因此,转储到文件时,这里有2个可能的失败点,数据库连接编码和文件编码。都 需要指定,否则你将受到默认编码的支配,这些编码会因平台而异,可能不是你想要使用的。

要指定数据库的连接编码,请执行

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

指定文件编码

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

正如您已经做过的那样,即使它最初没有起作用也是正确的做法