1

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

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

将数据转储到文件中会产生如下输出:

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

Win7 : data with ® # 正确的数据

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

1 回答 1

3

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

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

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

要指定文件编码,请执行

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

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

于 2013-01-10T04:54:59.467 回答