0

私は何をやっている?私は自分のsqliteデータベースをcsvにエクスポートしています-少なくとも私はしようとしています

私はこれを手動と「OpenCSV」の両方で行いました。

どちらの方法でも、非常に奇妙な結果が得られます。それらはうまくフォーマットされていないようです。列(通常は'、'?で区切られます)も特殊文字(opencsv内で処理されると言われています)も、本来あるべきようには見えません。コード:

CSVWriter writer = new CSVWriter(new FileWriter(file),'\n',',');

        String[] items = new String[11];
        c.moveToFirst();

        while(!c.isAfterLast()){


        items[0] = c.getString(c.getColumnIndex(BaseColumns._ID));
        items[1] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_QRCODE));
        items[2] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_NAME));
        items[3] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_AMOUNT));
        items[4] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_UNIT));
        items[5] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_PPU));
        items[6] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_TOTAL));
        items[7] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_COMMENT));
        items[8] = c.getString(c.getColumnIndex(DepotTableMetaData.ITEM_SHOPPING));
        items[9] = c.getString(c.getColumnIndex(DepotTableMetaData.CREATED_DATE));
        items[10] = c.getString(c.getColumnIndex(DepotTableMetaData.MODIFIED_DATE));

        c.moveToNext();
        writer.writeNext(items);

        }

        writer.close();

そしてそれはすべて結果としてこれを与えます:

ここに画像の説明を入力してください

私もFileWriterとStringBufferを使ってそれを行いましたが、まったく同じ結果が得られるようです...私を助けていただければ幸いです;)

stackoverflowを調べましたが、一致する質問が見つかりませんでした; /

編集:はい、私は「古い、非推奨の」カーソルを使用していることを知っていますが、それはここでの問題ではありません。ありがとう。

edit2:解決しまし!いくつかの一般的なエンコーディングを割り当てる必要があります!

CSVWriter writer = new CSVWriter(new OutputStreamWriter(new FileOutputStream(destination+"/output.csv"),"UTF-8"));

仕事は完璧でした!

4

1 に答える 1

3

CSVファイルの行を文字列の配列として取得し、列と行の間の区切り文字を自動的に生成するOpenCSVライターを使用しますが、OpenCSVに代わって実行させる代わりに、のすべての値を追加することで明示的に実行します。単一の文字列の行。したがって、明らかに、OpenCSVは一意の値を取り、コンマと改行をエンコードする必要がある単一の列が含まれていると見なします。

文字列の配列を使用して呼び出す必要がwriter.writeNext()あります。配列内の各文字列は、テーブルの単一のセルです。ライターがコンマと改行を生成します。

于 2012-06-03T17:10:05.967 に答える