2

您好,我正在从两个不同的文件中读取英语和南非荷兰语,并将其放入一个 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

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 回答
1

这是我的解决方案:首先,您必须清理您的应用程序,因为您在 apk 中进行的每个构建,您都重新创建数据库,有时更改代码中的编码不会显示给您效果。

首先,您必须通过使用 adb 重定向到您的包名称来清理您的应用程序,即

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

或者如果您在 android sdk 平台工具文件夹中

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 文件中读取行时,第二次放置编码字符集(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 convertBase.csv originalBase.csv

如果您是 Windows 用户,您可以尝试使用 notepad++

于 2013-03-05T10:31:54.913 回答