gpt4 book ai didi

Python SQLite : enforce UTF-8 encoding

转载 作者:行者123 更新时间:2023-12-05 06:10:49 26 4
gpt4 key购买 nike

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

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

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

那么解决方案是什么?

最佳答案

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

#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

关于Python SQLite : enforce UTF-8 encoding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64254300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com