阅读时如何避免转换为ASCII



我正在使用Python从SQL Server (pypyodbc)读取值并将它们插入PostgreSQL (psycopg2)

NAME字段中出现了导致错误的值:

Montaño

该值存在于我的MSSQL数据库只是很好(SQL_Latin1_General_CP1_CI_AS编码),并可以插入到我的PostgreSQL数据库只是很好(UTF8)使用PGAdmin和插入语句。

问题是使用python选择它会导致值被转换为:

Montaxf1o 

(xf1是'拉丁小写字母n带波浪'的ASCII码)

…当试图插入到PostgreSQL中时,会抛出以下错误:

invalid byte sequence for encoding "UTF8": 0xf1 0x6f 0x20 0x20

是否有任何方法可以避免将输入字符串转换为导致上述错误的字符串?

在Python_2下,您实际上确实想要执行从基本字符串到unicode类型的转换。如果你的代码看起来像

sql = """
SELECT NAME FROM dbo.latin1test WHERE ID=1
"""
mssql_crsr.execute(sql)
row = mssql_crsr.fetchone()
name = row[0]

那么你可能想转换基本的latin1字符串(从SQL Server检索)到类型unicode之前使用它作为一个参数到PostgreSQL INSERT,即,而不是

name = row[0]

你会做

name = unicode(row[0], 'latin1')

最新更新