2

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;
            }

助けてくれてありがとう!

4

2 に答える 2

1

文字列データは元々UTF-8でエンコードされていたようですが、 MacRomanと誤解されています。

最初に行うことは、データがデータベースに正しく保存されていることを確認することです。を使用SELECT HEX(SomeColumn)して、文字列に格納されている生のバイトを確認できます。SQLite のデフォルトのエンコーディングは UTF-8 であるため、正しくエンコードされた文字列にはC3A5for åC3A4for ä、およびC3B6for が含まれöます。E2889AE280A2, E2889AC2A7,が表示された場合E2889AE28882は、データが DB に入る前に文字の解釈の誤り (å→√•、ä→√§、ö→√δ) が発生しています。8C8A、およびのみが表示される場合9Aは、逆の誤解が行われています。

データベースが正しい場合、実際には MacRoman であるのに、システム エンコーディングが UTF-8 であると考える I/O ルーチンである可能性があります。のようなものを試してくださいSystem.setProperty("file.encoding", "macintosh");

于 2011-02-16T06:29:19.797 に答える