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

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

将数据转储到文件中,输出为:

Winxp:用什么数据? #®替换为?

Win7:带有®#正确数据的数据

任何想法,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

最佳答案

因此,这里有两个可能的故障点,即转储到文件时的数据库连接编码和文件编码。都
需要指定,否则您会受默认编码的支配,默认编码会因平台而异,并且可能不是您要使用的默认编码。

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

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


要指定文件编码,请执行

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


正如您已经做过的,即使一开始它不起作用,这也是正确的做法

09-13 07:41