Python 2.7 阅读时如何避免转换为ASCII码
我正在使用Python从SQL Server(PyODBC)读取值并将其插入PostgreSQL(psycopg2) 名称字段中出现导致错误的值:Python 2.7 阅读时如何避免转换为ASCII码,python-2.7,ascii,psycopg2,pypyodbc,Python 2.7,Ascii,Psycopg2,Pypyodbc,我正在使用Python从SQL Server(PyODBC)读取值并将其插入PostgreSQL(psycopg2) 名称字段中出现导致错误的值: Montaño 该值正好存在于我的MSSQL数据库中(SQL\u拉丁1\u通用\u CP1\u CI\u作为编码),可以使用PGAdmin和insert语句将其插入到我的PostgreSQL数据库中(UTF8) 问题是使用python选择它会导致值转换为: Monta\xf1o (xf1是“带波浪号的拉丁文小写字母n”的ASCII码) …这导致
Montaño
该值正好存在于我的MSSQL数据库中(SQL\u拉丁1\u通用\u CP1\u CI\u作为编码),可以使用PGAdmin和insert语句将其插入到我的PostgreSQL数据库中(UTF8)
问题是使用python选择它会导致值转换为:
Monta\xf1o
(xf1是“带波浪号的拉丁文小写字母n”的ASCII码)
…这导致在尝试插入PostgreSQL时引发以下错误:
invalid byte sequence for encoding "UTF8": 0xf1 0x6f 0x20 0x20
有没有办法避免将输入字符串转换为导致上述错误的字符串?在Python_2下,您确实希望执行从基本字符串到unicode类型的转换。那么,如果您的代码看起来像
sql=”“”\
从dbo.latin1test中选择名称,其中ID=1
"""
mssql_crsr.execute(sql)
row=mssql_crsr.fetchone()
名称=行[0]
然后,您可能希望将基本latin1
字符串(从SQL Server检索)转换为unicode
类型,然后再将其用作PostgreSQL插入的参数,即,而不是
name=行[0]
你会的
name=unicode(第[0]行,'latin1')
太棒了!!!工作得很好!我将把它加入到我的制作脚本中,但这解决了目前的问题。非常感谢。