【发布时间】:2013-01-21 22:14:16
【问题描述】:
我必须更新现有脚本,以便将一些数据写入 Oracle 10g 数据库。脚本和数据库都在同一台 Solaris 10 (Intel) 机器上运行。 Python 是 v2.4.4。
我正在使用 cx_Oracle 并且可以毫无问题地读取/写入数据库。但是我正在编写的数据包含未正确写入的重音字符。重音字符变成一个倒置的问号。
使用此代码从二进制文件中读取值,在:
class CustomerHeaderRecord:
def __init__( self, rec, debug = False ):
self.record = rec
self.acct = rec[ 84:104 ]
acct 变量的内容正确显示在屏幕上。
以下是写入数据库的代码(acct 值作为val_1 变量传入):
class MQ:
def __init__( self, rec, debug = False ):
self.customer_record = CustomerHeaderRecord( rec, debug )
self.add_record(self.customer_record.acct, self.cm_custid)
def add_record(self, val_1, val_2):
cur = conn.cursor()
qry = "select count(*) from table_name where value1 = :val1"
cur.execute(qry, {'val1':val_1})
count = cur.fetchone()
if count[0] == 0:
cur = conn.cursor()
qry = "insert into table_name (value1, value2) values(:val1, :val2)"
cur.execute(qry, {'val1':val_1, 'val2':val_2})
conn.commit()
acct 值无法正确进入数据库。我用谷歌搜索了一堆关于 unicode 和 UTF-8 的东西,但还没有找到任何对我有帮助的东西。在数据库中,NLS_LANGUAGE 是“American”,NLS_CHARACTERSET 是“AL32UTF8”。
在插入之前/期间我是否需要对acct 变量“做某事”?
【问题讨论】:
-
print repr(acct)的输出是什么?您的数据很可能已经编码,但不是 Oracle 使用的 UTF-8 编码。 -
@MartijnPieters - 它显示为
'PF R\xe9solu Canada Inc'。刚打印时没有repr,它是PF Résolu Canada Inc。 -
这是拉丁语 1;我会给你写一个答案。