我对这个错误做了一些研究,但实际上并不清楚发生了什么。据我所知,我遇到的问题基本上是因为我正在从一种编码类型转换为另一种编码类型。
我会翻译中文,这段内容是关于编程的。它指的是从数据库检索表时客户端的编码方式。
我还发现了这个页面,它概述了这个问题,但我无法弄清楚需要做什么来解决它。 基本上,我很困惑发生了什么事情,也不确定该如何解决。非常感谢任何帮助。祝好。
def write_table_to_file(table, connection):
db_table = io.StringIO()
cur = connection.cursor()
#pdb.set_trace()
cur.copy_to(db_table, table)
cur.close()
return db_tabl
这个方法让我头疼。运行这个方法时,会输出以下错误信息:
[u350932@config5290vm0 python3]$ python3 datamain.py
Traceback (most recent call last):
File "datamain.py", line 48, in <module>
sys.exit(main())
File "datamain.py", line 40, in main
t = write_table_to_file("cms_jobdef", con_tctmsv64)
File "datamain.py", line 19, in write_table_to_file
cur.copy_to(db_table, table)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 40: ordinal not in range(128)
我会翻译中文,这段内容是关于编程的。它指的是从数据库检索表时客户端的编码方式。
tctmsv64=> SHOW CLIENT_ENCODING;
client_encoding
-----------------
sql_ascii
(1 row)
数据库编码是LATIN1
我要将它们放入的数据库编码为
S104838=# SHOW CLIENT_ENCODING;
client_encoding
-----------------
WIN1252
(1 row)
数据库编码为UTF8
从我找到的线程中,建议更改编码
To correct your function, you'll have to know what encoding the byte
string is in, and convert it to unicode using the decode() method,
and compare that result to the unicode string.
问题在于当我尝试使用解码方法时,会出现文件类型不正确的错误。我查看了Python 3.4中关于类io.StringIO(initial_value='', newline='\n')¶方法的文档,但没有找到更改编码的内容。我还发现了这个页面,它概述了这个问题,但我无法弄清楚需要做什么来解决它。 基本上,我很困惑发生了什么事情,也不确定该如何解决。非常感谢任何帮助。祝好。
SQL_ASCII
更像是一个未编码标识。它告诉数据库将接收的字节存储,不进行转换或验证。它不应该被使用。您可能在源数据库中有不同编码的文本混合。 - Craig Ringer