1

Oracle db テーブルで、いくつかのデータを含む ® 文字があります

pyodbc が WinXP 32bit と Win7 64bit から同じクエリを実行すると、異なる結果が得られる

データをファイルにダンプすると、次のような出力が得られます。

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
4

1 に答える 1

3

したがって、ここでは、データベース接続エンコーディングとファイルへのダンプ時のファイルエンコーディングの2つの障害点が考えられます。両方を指定する必要があります。そうしないと、プラットフォームによって異なり、使用したいものではない可能性があるデフォルトのエンコーディングに翻弄されることになります。

データベースの接続エンコーディングを指定するには、次の手順を実行します。

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

ファイルのエンコーディングを指定するには、

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

あなたがすでにしたように、それが最初はうまくいかなかったとしても、それは正しいことでした

于 2013-01-10T04:54:59.467 に答える