我有一个pythonsgi脚本,它试图提取发布到它的rss项目,并将rss存储在sqlite3db中。我正在使用flup作为WSGIServer。
获取发布内容:
postData=环境[“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表示。在
运行python2.5.2 sqlite 3.5.7
提前感谢您对这个问题的深入了解。在
以下是postData中包含的初始数据的示例,这些数据由repr函数修改,写入文件并用更少的时间查看:
'\xef\xbb\xbf
谢谢你的回复!很有帮助。在
我提交的示例没有通过stackoverflow html过滤器,将重试,将小于或大于转换为实体(预览表明这是有效的)。在
\xef\xbb\xbf<;?xml version=“1.0”encoding=“utf-16”?&>lt;rssxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema“>;<;频道>;<;项目d3p1:size=”0”xsi:类型=“tFileItem”XML编号:d3p1="http://htinc.com/opensearch ex/1.0/“>
您确定您的传入数据编码为UTF-16(或者称为UCS-2)吗?在
UTF-16编码的unicode字符串通常包含大量NUL字符(当然对于ASCII中存在的所有字符也是如此),因此UTF-16数据几乎不能存储在环境变量中(POSIX中的env vars是以NUL结尾的)。在
请提供
postData
变量内容的示例。使用repr()
输出它们。在在此之前,最可靠的建议是:在所有的DB交互中,Python端的字符串应该是unicode字符串;DB接口应该负责所有必要的翻译/编码/编码。在
关于插入编码-在任何像样的数据库API中,您应该只插入
unicode
字符串和unicode
字符串。在对于阅读和解析部分,我推荐markpilgrim的Feed Parser。它正确地处理BOM,并且许可证允许商业使用。如果没有对RSS数据进行任何实际的解析,这可能有点过于繁重。
在插入SQL之前,应该将字符串转换为unicode兼容的字符串。如果引发UnicodeError异常,则对字符串.编码(“utf-8”)。在
或者,你可以根据他的编码模式自动检测编码并对其进行编码。Auto detect encoding
相关问题 更多 >
编程相关推荐