我有一个python sgi脚本,该脚本试图提取发布到它的rss项目并将rss存储在sqlite3 db中。我正在使用flup作为WSGIServer。
要获取发布的内容:
    postData = environ [“ wsgi.input”]。read(int(environ [“ CONTENT_LENGTH”]))

尝试存储在数据库中:

from pysqlite2 import dbapi2 as sqlite
ldb = sqlite.connect("/var/vhost/mysite.com/db/rssharvested.db")
lcursor = ldb.cursor()
lcursor.execute("INSERT into rss(data) VALUES(?)", (postData,))


这导致仅将rss的前几个字符存储在记录中:
ÿþ<
我相信最初的字符是rss的BOM。

我已经尝试过所有可以想到的排列方式,包括先将rss编码为utf-8,然后尝试存储,但结果是相同的。我无法解码,因为某些字符无法表示为unicode。

运行python 2.5.2
sqlite 3.5.7

预先感谢您对这个问题的任何见解。



这是由repr函数修改后的postData中包含的初始数据的示例,该初始数据被写入文件并用更少的内容查看:

'\ xef \ xbb \ xbf

感谢所有答复!非常有帮助。



我提交的示例未通过stackoverflow html过滤器进行筛选,将再次尝试,将其转换为大于或小于转换为实体(预览表明此方法可行)。

\ xef \ xbb \ xbf

最佳答案

在插入SQL之前,您应该将字符串转换为与unicode兼容的字符串。如果引发UnicodeError异常,则对string.encode(“ utf-8”)进行编码。

或者,您可以根据其编码模式自动检测编码并对其进行编码。 Auto detect encoding

关于python - 使用python将utf-16编码的rss流存储到sqlite3中的正确过程是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/457641/

10-17 00:38