我有一个 python sgi 脚本,它尝试提取发布到它的 rss 项目并将该 rss 存储在 sqlite3 数据库中。我使用 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
预先感谢您对此问题的任何见解。
<小时/>以下是 postData 中包含的初始数据示例,由 repr 函数修改,写入文件并使用 less 进行查看:
'\xef\xbb\xbf
谢谢大家的回复!很有帮助。
<小时/>我提交的示例未通过 stackoverflow html 过滤器将再次尝试,将小于和大于转换为实体(预览表明此方法有效)。
\xef\xbb\xbf
最佳答案
关于插入编码 - 在任何合适的数据库 API 中,您应该仅插入 unicode
字符串和 unicode
字符串。
对于阅读和解析部分,我推荐 Mark Pilgrim 的 Feed Parser 。它正确处理BOM,并且许可证允许商业使用。 如果您没有对 RSS 数据进行任何实际解析,这可能有点过于严厉。
关于python - 使用 python 将 utf-16 编码的 rss 流存储到 sqlite3 中的正确过程是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/457641/