2011-02-14 101 views
2

我有一個數據庫,我從我的Android項目中提取數據。這裏有一些文本字符串,其中瑞典語字母å,ä,ö寫爲:√•=å,√§=ä,√δ=ö。在我將這些符號打印到應用程序的textview之前,將這些符號轉換爲實際字母的最佳方式是什麼?是一種替代,就像替代√一樣,要走的路?如何在現在提取數據的查詢中輸入:如何在Android應用程序中顯示瑞典語字符?

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

你如何將數據插入到數據庫中?當我將瑞典語字母插入我的時候,它就像預期的那樣出現在我的`ListView`中。 – RivieraKid 2011-02-15 13:28:50

+0

它們被插入爲√= =,√=√,√8=ö,這些符號代表字母。這是我之後的翻譯,如果上面的格式是像utf-8這樣的已知格式,或者我應該做一個替換這個等等。 – kakka47 2011-02-15 14:12:24

回答

1

看來您的字符串數據最初編碼爲UTF-8,但被誤解爲MacRoman

首先要做的是確保您的數據正確存儲在數據庫中。您可以使用SELECT HEX(SomeColumn)查看爲該字符串存儲的原始字節。 SQLite中的默認編碼是UTF-8,因此對於ö,正確編碼的字符串將具有C3A5,å,C3A4,äC3B6。如果您看到E2889AE280A2,E2889AC2A7,E2889AE28882,則在數據進入數據庫之前會發生對字符的錯誤解釋(?→√§,?→√δ)。如果您只看到8C8A9A,則會發生相反的誤解。

如果你的數據庫是正確的,那麼它可能是一個I/O例程,當它真的是MacRoman時,它認爲系統編碼是UTF-8。嘗試類似System.setProperty("file.encoding", "macintosh");

0

這是有點老了後,但如果你使用的是Windows cmd shell類型的數據導入sqlite的,嘗試在shell這樣做:

C:> CHCP 65001

這將改變代碼CMD殼的頁爲UTF 8

C:> sqlite3的database.db < inserts.sql

其中inserts.sql是UTF-8(無BOM CHARACTER !!)插入物的序列。你可以使用記事本創建這種類型的文件++

希望它有幫助