Python3 "freezes" 向sqlite数据库插入unicode字符后

Python3 "freezes" after inserting unicode characters to sqlite database

我正在编写一个 Firefox 扩展,它通过本机消息传递连接到 python3 程序。目前我正在通过 about:debugging 页面上的临时加载来测试插件。

python 部分负责在 sqlite 数据库中存储数据(例如:从网络收集的信息)。只要数据只包含 ASCII 范围内的字符,一切都可以正常工作。一旦数据包含超出该范围的字符(例如:西里尔字母),python 程序似乎 "freeze"。此时,如果我在 sqlite 浏览器中打开数据库,则带有 unicode 字符的行不可用。然后,如果我在 about:debugging 重新加载我的插件(有效地终止 python 程序),这些行将正确显示在数据库中。

我正在为查询使用参数替换,它们在 try 块内,这样我就可以记录任何错误,但日志文件(或 Firefox 浏览器控制台 - 从 stderr 应该显示本机应用程序)。

另一件奇怪的事情是,在 python 程序终止之前,我尝试在将数据插入数据库的函数中记录的任何内容也不会显示在日志文件中。

什么会导致这种情况 "freezing"?我该如何进一步调试?

更新

这是我可以重现问题的最小代码:

这里是 the native python 3 app, and here is the addon main.js 文件。 Python 版本是 3.4.3,OS 是 Ubuntu 14.04 64 位,Firefox 是 59.0b11(64 位)开发版。

前三个消息没有问题,发送最后一个时出现上述症状。

看来我没有正确解码来自标准输入的消息。最初我有:

raw_message = sys.stdin.read(message_length)

现在我有了这个:

raw_message = sys.stdin.buffer.read(message_length).decode(sys.stdin.encoding)

或者这样,如果标准输入的编码不是'utf8'(例如:在windows):

raw_message = sys.stdin.buffer.read(message_length).decode('utf8')

这样就不会发生冻结。