【发布时间】:2017-05-15 03:32:47
【问题描述】:
我正在阅读带有网络爬虫的斯堪的纳维亚语言网站 - 并希望将它们插入到我的 PostgreSQL 数据库中。
最初我尝试将我的 PSQL DB 编码为 utf-8,然后手动尝试插入会出现问题的字符,如下所示:
Insert into name (surname) VALUES ('Børre');
这是在 Windows PSQL shell 中完成的。
这给了我以下错误:错误:编码“UTF8”的字节序列无效:0x9b。因此,在进行了一些谷歌搜索后,我将客户端编码更改为 latin1。现在该声明成功了。服务端编码还是utf8。
当我通过我的 python 脚本执行相同的插入操作时,名称在我的数据库中显示为 B°rre。如果我将客户端的编码改回 utf8,我也会得到带有错误特殊字符的条目。
我的 python 脚本是 utf8 编码的,但打印的名称是正确的。
插入语句:
con = psycopg2.connect(*database details*)
print("Opened database successfully")
cur = con.cursor()
#INSERT NAME
query = "INSERT INTO name (surname) VALUES (%s) RETURNING id"
data = ('børre')
cur.execute(query,data)
如前所述,print(personObject.surname) 给出 'Børre'
如果我尝试以下操作:
query = "INSERT INTO name (surname) VALUES (%s) RETURNING id"
data = ('børre'.encode('utf-8'))
cur.execute(query,data)
我在我的数据库中得到以下信息:
\x62c383c2b8727265
【问题讨论】:
-
哪个版本的 Python?
-
你能发布你的堆栈跟踪吗?
-
为什么不用UTF-8编码呢?今天,没有理由不使用它。
-
Python 版本为 3.x。我从 utf-8 更改的原因在问题的开头说明了。我会尽快用堆栈跟踪更新问题。
-
堆栈跟踪没有输出任何东西,我在 python 中没有错误。 @LaurentLAPORTE
标签: python windows postgresql encoding utf-8