我有一个数据库,我从我的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;
}
感谢您的帮助!
答案 0 :(得分:1)
您的字符串数据最初在UTF-8中进行了编码,但却被误解为MacRoman。
要做的第一件事是确保您的数据正确存储在数据库中。您可以使用SELECT HEX(SomeColumn)
查看为字符串存储的原始字节。 SQLite中的默认编码是UTF-8,因此正确编码的字符串C3A5
为å
,C3A4
为ä
,C3B6
为ö
{1}}。如果您看到E2889AE280A2
,E2889AC2A7
,E2889AE28882
,那么在数据进入之前就会发生对字符(å→√•,ä→√§,ö→√)的错误解释DB。如果你只是看到8C
,8A
和9A
,那么就会发生相反的误解。
如果您的数据库是正确的,那么它可能是一个I / O例程,它认为系统编码是UTF-8,当它真的是MacRoman时。尝试类似System.setProperty("file.encoding", "macintosh");
的内容。
答案 1 :(得分:0)
这是一个很老的帖子,但是如果你使用windows cmd shell将数据导入sqlite,请尝试在shell中执行此操作:
C:GT; chcp 65001
这会将cmd shell的代码页更改为utf 8
C:GT; sqlite3 database.db< inserts.sql
其中inserts.sql是UTF-8(WITHOUT BOM CHARACTER !!)插入序列。您可以使用Notepad ++
创建该类型的文件希望有所帮助