2

こんにちは、2つの異なるファイルから英語とアフリカーンス語を読んでいて、1つのsqliteデータベースに入れています。たとえば、アフリカーンス語では正しい単語です

アフリカーンス語は下にあります

    'n slegte lot
     'n voël die wilde diere van die prooi
      'n trekvogel

================================================== ========

        public class MainActivity extends Activity {

DbAdapterSDCard db;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    String array[] = { "afrikaans" };
    for (int j = 0; j < array.length; j++) {
        String filePath1 = "/sdcard/Dictionarys/english.txt";
        String filePath2 = "/sdcard/Dictionarys/" + array[j] + ".txt";
        String UTF8 = "utf8";
        int BUFFER_SIZE = 8192;
        int i = 0;
        System.out.println(array[j]);
        db = new DbAdapterSDCard(array[j]);
        try {
            db.open();
            File file = new File(filePath3);
            file.createNewFile();

            BufferedReader br1 = new BufferedReader(new InputStreamReader(
                    new FileInputStream(filePath1),UTF8), BUFFER_SIZE);

            BufferedReader br2 = new BufferedReader(new InputStreamReader(
                    new FileInputStream(filePath2), UTF8), BUFFER_SIZE);

            String sCurrentLine1, sCurrentLine2;

            while ((sCurrentLine1 = br1.readLine()) != null
                    && ((sCurrentLine2 = br2.readLine()) != null)) {
                db.insertTitle(sCurrentLine1, sCurrentLine2);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {

            db.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

しかし、sqliteではこのように挿入されます ここに画像の説明を入力

どちらもUTF-8文字セットをエンコードしています........

私はたくさん試しましたが、成功することはできませんでした

txtファイルのエンコーディングは以下です

ここに画像の説明を入力

エンコーディングutf-8を使用すると、文字が適切に表示されません:(

ここに画像の説明を入力

4

2 に答える 2

1

これが私の解決策です:apkで作成するすべてのビルド、データベースを再作成し、コードのエンコーディングを変更しても効果が得られない場合があるため、最初にアプリケーションをクリーンアップする必要があります。

まず、adbを使用してパッケージ名にリダイレクトすることにより、アプリケーションをクリーンアップする必要があります。

〜/ android-sdks / platform-tools /./ adb shell pm clear com.example.my.project

または、AndroidSDKプラットフォームツールフォルダにいる場合

adb shell pm clear com.example.my.project

その後

adb shell am start -a android.intent.action.DELETE -d package:com.example.my.project

データベースを変更するときは、毎回このコマンドを使用してください。いくつか変更を加えましたが、adbコマンドを使用するまで効果は見られませんでした。

ieファイルから行を読み取るときにエンコード文字セットを2番目に配置します(Linuxの例):

private class DatabaseHelper extends SQLiteOpenHelper {

    private static final String ENCODING = "UTF-8";
    private Context context;

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
        //DATABASE_NAME is just a name of database

        this.context = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(COMMAND_CREATE_TABLE);
        //COMMAND_CREATE is just command to create table i.e.
        //CREATE TABLE myTable ( _id int...

        try {
            InputStream inputStream = this.context.getResources().openRawResource(R.raw.my_base_file);
            BufferedReader bufferReader;

            if (inputStream != null) {
                bufferReader = new BufferedReader(new InputStreamReader(inputStream, ENCODING));

                String line = "";

                while ((line = bufferReader.readLine()) != null) {
                    db.execSQL(COMMAND_INSERT_START + line + COMMAND_INSERT_END);
                }

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS myTable");
        onCreate(db);
    }

}

public Cursor fetchAllRows() {
    SQLiteDatabase localSQLiteDatabase = this.sqlDatabase;
    return localSQLiteDatabase.query("myTable", ROWS_COLUMNS_NAME, null, null, null, null, null);
}

すべての操作の前に、データを含むファイルをUTF-8に変換すると便利です。これを行う方法のサンプルコード(Linuxバージョン)は次のとおりです。

iconv -f WINDOWS-1250 -t UTF-8 -o ConvertedBase.csv originalBase.csv

Windowsユーザーの場合は、notepad++を使用してみてください。

于 2013-03-05T10:31:54.913 に答える
1

Android sqlite はデフォルトで UTF-8 を使用します。したがって、問題はファイルから読み取るときにあるようです。

InputStreamReader にエンコーディングを追加してみてください

BufferedReader br2 = new BufferedReader(new InputStreamReader(
                    new FileInputStream(filePath2), "utf-8"), BUFFER_SIZE);

または、db.open() 関数を掘り下げることもできます。

于 2013-02-25T12:40:39.137 に答える