2

我有一个数据库,可以从我的 Android 项目中提取数据。那里有一些带有瑞典字母å、ä、ö的文本字符串:√•=å、√§=ä、√δ=ö。在我在应用程序的 textview 上打印这些符号之前,将它们转换为实际字母的最佳方法是什么?替代,比如用å替换√•,是要走的路吗?如何在现在获取数据的查询中输入:

public Cursor getAlternative1(long categoryid, int questionid) {
                final String MY_QUERY = "SELECT question, image, alternative, questionid, correct FROM tbl_question a INNER JOIN tbl_alternative b ON a._id=b.questionid AND b.categoryid=a.categoryid WHERE a.categoryid=? AND a._id=?";

                Cursor cursor = mDb.rawQuery(MY_QUERY, new String[]{String.valueOf(categoryid), String.valueOf(questionid)});
                if (cursor != null) {
                      cursor.moveToFirst();
                 }
                return cursor;
            }

谢谢你的帮助!

4

2 回答 2

1

看来您的字符串数据最初是用UTF-8编码的,但被误解为MacRoman

首先要做的是确保您的数据正确存储在数据库中。您可以使用SELECT HEX(SomeColumn)来查看为字符串存储的原始字节。SQLite 中的默认编码是 UTF-8,因此正确编码的字符串将具有C3A5for åC3A4foräC3B6for ö。如果您看到E2889AE280A2E2889AC2A7E2889AE28882,那么在数据进入数据库之前就发生了对字符(å→√•、ä→√§、ö→√δ)的误解。如果您只看到8C8A9A,那么就会产生相反的误解。

如果您的数据库是正确的,那么它可能是一个 I/O 例程,它认为系统编码是 UTF-8,而实际上它是 MacRoman。尝试类似的东西System.setProperty("file.encoding", "macintosh");

于 2011-02-16T06:29:19.797 回答
0

这是一个有点旧的帖子,但如果您使用 windows cmd shell 将数据导入 sqlite,请尝试在 shell 中执行此操作:

c:> chcp 65001

这会将 cmd shell 的代码页更改为 utf 8

c:> sqlite3 数据库.db < inserts.sql

其中 inserts.sql 是一个 UTF-8(没有 BOM 字符!!)插入序列。您可以使用 Notepad++ 创建那种文件

希望能帮助到你

于 2014-06-13T12:58:17.033 回答