【问题标题】:pyodbc returning ® as?pyodbc 返回® as?
【发布时间】:2013-01-09 05:46:25
【问题描述】:

在 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

【问题讨论】:

  • 如何将数据转储到文件中?这与 Windows XP 无关
  • 我尝试过使用各种方法转储它,以文本格式、二进制写入文件以及打开编解码器文件,但都给出相同的结果
  • 我的意思是你需要显示代码
  • @Esailija:添加了查询代码
  • 好吧,你没有指定连接编码。您可以使用 os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.UTF8' 指定 UTF-8。但我也在寻找将数据转储到文件的代码。

标签: python unicode windows-xp pyodbc


【解决方案1】:

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

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

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

要指定文件编码做

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2018-05-12
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多