python - 使用 python 将 utf-16 编码的 rss 流存储到 sqlite3 中的正确过程是什么

标签 python sqlite wsgi

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

最佳答案

关于插入编码 - 在任何合适的数据库 API 中,您应该仅插入 unicode 字符串和 unicode 字符串。

对于阅读和解析部分,我推荐 Mark Pilgrim 的 Feed Parser 。它正确处理BOM,并且许可证允许商业使用。 如果您没有对 RSS 数据进行任何实际解析,这可能有点过于严厉。

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

相关文章:

python - sys.modules 有任何特定的顺序吗?

java - 有 SQLite 查询 validator 库吗?

database - 如何使用进程内迁移运行器和内存 SQLite 数据库测试流畅的迁移

python - 为什么要使用 wsgiref simple_server?

python - 关于 WSGI 堆栈设置/管理的建议?

python - 为什么 csv.writer 删除前导零?

python - 将文本文档拆分为 excel 工作表 xls

android - 如何在 flutter (android)应用程序中使用 C++ 代码?

python - SQLite3 序列类型没有增加

python 简单的 wsgi 文件上传脚本 - 有什么问题?