gpt4 book ai didi

android - 无法将 SQLiteDatabase 编码设置为 UTF-8 以外的任何编码

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:16:39 25 4
gpt4 key购买 nike

我正在解决一个问题,我需要将一个 sqlite 数据库附加到另一个数据库。其中一个数据库是由我的应用程序创建的,另一个是从远程服务器下载的。我更愿意以合法的数据格式(如 JSON)获取它,但我无法控制这方面。

问题是下载的sqlite文件的编码是UTF-16le。本地文件是 UTF-8(Android 的默认)。我可以单独读取这两个文件,但 SQLite 仅在编码匹配时才允许 ATTACH 操作。

解决方案应该像每当我创建本地数据库时使用 UTF-16le 编码一样简单,但似乎编码总是在我获取数据库对象之前设置并且我无法更改它。我正在使用 SQLiteOpenHelper,我假设所有 PRAGMA 语句都应该像这样在 onConfigure() 中发生:

@Override 
public void onConfigure(SQLiteDatabase db) {
db.execSQL("PRAGMA encoding = \"UTF-16le\"");
}

当我在这一点之后检查编码时,它始终是 UTF-8。

Log.d(TAG, DatabaseUtils.dumpCursorToString(db.rawQuery("PRAGMA encoding", null)));

结果:

04-12 11:10:07.116: D/MainActivity(10743): >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@b3636fd0
04-12 11:10:07.116: D/MainActivity(10743): 0 {
04-12 11:10:07.116: D/MainActivity(10743): encoding=UTF-8
04-12 11:10:07.116: D/MainActivity(10743): }
04-12 11:10:07.116: D/MainActivity(10743): <<<<<

我什至尝试在内存中创建一个数据库并设置它的编码,但之后它总是报告 UTF-8:

SQLiteDatabase db = SQLiteDatabase.create(null);
db.execSQL("PRAGMA encoding = \"UTF-16le\"");

我有点困惑,因为我可以打开这些 UTF-16le 编码的数据库并且它们的编码被正确报告,但我似乎无法在设备上创建一个。有什么办法可以在我创建数据库时设置数据库的编码吗?

最佳答案

根据 thisthis Android sqlite 仅支持 UTF-8 和 UTF-16。

这有帮助吗?亚龙

关于android - 无法将 SQLiteDatabase 编码设置为 UTF-8 以外的任何编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15979402/

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