首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python :强制SQLite-8编码

Python :强制SQLite-8编码
EN

Stack Overflow用户
提问于 2020-10-08 08:55:15
回答 1查看 43关注 0票数 3

我正在开发一个跨平台的Python (3.7+)应用程序,并且我需要依赖于SQLite中文本列的排序顺序,这意味着文本值的比较算法必须基于UTF8字节。即使系统编码(sys.getdefaultencoding())不是utf-8

但是在sqlite3 module的文档中,我找不到用于sqlite3.connect的编码选项。

我读到使用sys.setdefaultencoding("utf-8")是一种丑陋的黑客行为,而且非常不鼓励(这就是为什么我们需要在调用它之前使用reload(sys) )

那么解决方案是什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-08 13:00:34

查看Python的_sqlite/connection.c代码,可以调用sqlite3_open_v2sqlite3_open (取决于编译标志)。基于sqlite doc,它们都使用UTF8作为默认的数据库编码。我仍然不确定"default“这个词的意思,因为它没有提到任何覆盖它的方法!但是看起来Python不能用另一种编码打开。

代码语言:javascript
复制
#ifdef SQLITE_OPEN_URI
    Py_BEGIN_ALLOW_THREADS
    rc = sqlite3_open_v2(database, &self->db,
                         SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE |
                         (uri ? SQLITE_OPEN_URI : 0), NULL);
#else
    if (uri) {
        PyErr_SetString(pysqlite_NotSupportedError, "URIs not supported");
        return -1;
    }
    Py_BEGIN_ALLOW_THREADS
    rc = sqlite3_open(database, &self->db);
#endif
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64254300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档