我有一个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/