簡體   English   中英

使用UTF-8寫入文件

[英]Write file with UTF-8

我正在嘗試使用utf-8編碼編寫文件。 我想在Excel中的PC上看到此文件,我已經看了實現此代碼的足夠示例。 但是我沒有達到預期的結果。 我的代碼:

    String baseDir = android.os.Environment.getExternalStorageDirectory().getAbsolutePath();
    String fileName = etName.getText().toString() + ".csv";
    String filePath = baseDir + File.separator + fileName;
    File sdCardFile = new File(filePath);

    String DATE = "01.04.2017 - 30.04.2017";
    String NEW_LINE = "\n";
    String NEW_CELL = ";";
    String HEADER = "Место;" +
            "Фамилия ИО;" +
            "Цикл ТО-1;" +
            "Культурное состояние л-ва;" +
            "Посещение тех.занятий;" +
            "Расшифровка лент;" +
            "Охрана труда;" +
            "Отказы";

BufferedWriter bufferedWriter = new BufferedWriter
                (new OutputStreamWriter(new FileOutputStream(sdCardFile), "UTF-8"));
        bufferedWriter.write(DATE);
        bufferedWriter.write(NEW_LINE);
        bufferedWriter.write(HEADER);
        for(int i = 0; i < machinists.size(); i ++){
            bufferedWriter.write(NEW_LINE);
            bufferedWriter.write(String.valueOf(i+1));
            bufferedWriter.write(NEW_CELL);
            bufferedWriter.write(machinists.get(i).getLastName());
            bufferedWriter.write(NEW_CELL);
            bufferedWriter.write(String.valueOf(machinists.get(i).getPoints().getTo()));
            bufferedWriter.write(NEW_CELL);
            bufferedWriter.write(String.valueOf(machinists.get(i).getPoints().getCultureState()));
            bufferedWriter.write(NEW_CELL);
            bufferedWriter.write(String.valueOf(machinists.get(i).getPoints().getTechnicalSessions()));
            bufferedWriter.write(NEW_CELL);
            bufferedWriter.write(String.valueOf(machinists.get(i).getPoints().getTapeTranscript()));
            bufferedWriter.write(NEW_CELL);
            bufferedWriter.write(String.valueOf(machinists.get(i).getPoints().getOt()));
            bufferedWriter.write(NEW_CELL);
            bufferedWriter.write(String.valueOf(machinists.get(i).getPoints().getFault()));
            bufferedWriter.write(NEW_CELL);
        }
        bufferedWriter.close();
    }

但是我看到了。

截圖excel csv

為什么?

我解決了這個問題!

FileOutputStream os = new FileOutputStream(sdCardFile);
        os.write(0xef);<-!!!!!!!!
        os.write(0xbb);<-!!!!!!!!
        os.write(0xbf);<-!!!!!!!!
        CSVWriter writer = new CSVWriter(new OutputStreamWriter(os), ';');
writer.writeNext(HEADER);
...
writer.writeNext('something data');
writer.close();

我不確定這是否有幫助,但是也許以這種方式將字符串格式化為UTF-8會有所幫助:

bufferedWriter.write(new String(machinists.get(i).getLastName().getBytes(), "UTF-8"));

和標題類似。

編輯:

您可以嘗試做的另一件事是為所有值和添加" ,作為定界符(csv畢竟代表“逗號分隔的值”):

"1","Аркаев","10","7","6","5","0","6",

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM