pyodbc®as?

2024-09-28 22:17:57 发布

您现在位置:Python中文网/ 问答频道 /正文

在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

Tags: 数据portpwdresconntmpdbnametry
1条回答
网友
1楼 · 发布于 2024-09-28 22:17:57

所以这里有两个可能的失败点,数据库连接编码和转储到文件时的文件编码。两者 需要指定,否则您将任由默认编码的摆布,这些编码将在不同平台之间变化,并且可能不是您想要使用的。你知道吗

要指定数据库的连接编码,请执行以下操作

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

要指定文件编码,请执行以下操作:

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

就好像你第一次做的事情还没做一样

相关问题 更多 >