簡體   English   中英

^M 個字符顯示在使用 opencsv.CSVWriter 生成的 CSV 文件中

[英]^M characters showing in CSV file generated using opencsv.CSVWriter

Csv 編寫代碼

private void writeReversalPendingCsv(List<String[]> elements) throws IOException {
    BufferedWriter writer = null;
    CSVWriter csvWriter = null;
    String fileName = null;
    ..
    writer = new BufferedWriter(new FileWriter(filePath));
            Character sep = new Character('|');
            csvWriter = new CSVWriter(writer,
                    sep,
                    new Character('\0'),
                    CSVWriter.DEFAULT_ESCAPE_CHARACTER,
                    CSVWriter.DEFAULT_LINE_END);
            for (String[] row : elements) {
                 csvWriter.writeNext(row);
            }

Csv 在 vim 模式下 -

2|value|hello^M
2|value2|hello2

CSV 讀數

在寫這部分之前,我還看了一個相同格式的csv。

Scanner scanner = new Scanner(file.getInputStream());
            List<String[]> reversalPending = new ArrayList<>();
            scanner.useDelimiter("\\n");
            int totalRows = 0;
            while (scanner.hasNext()) {
                   ..
                   String line = scanner.next();
                   String[] arr = line.split("\\|");
                   .. processing 
                   if(processing fails) {
                       reversalPending.add(arr);
                       writeReversalPendingCsv(reversalPending);
                   }
            }

我處理每一行並根據某些條件,獲取這些行並將它們寫入 csv 文件。

所以,我的整體邏輯是——

  • 讀取 csv 文件
  • 處理每一行
  • 將未處理的行轉儲到 csv 文件中。

如果我使用 csv 的 output 中的 csv 文件寫入並輸入相同的流程,則處理有效,但我得到了額外的 ^M -

2|value|hello^M^M
2|value2|hello2

我應該防止這種情況嗎? 怎么樣,如果是這樣?

在 vim 中, ^M用於顯示\r回車字符(有關其他“看起來很奇怪的字符”,請參閱內容)。

\r\n被 windows 用作“行尾”,而 unix 僅使用\n

這里發生的情況是您的輸入文件使用\r\n作為行結尾, \r沒有被Scanner “吃掉”並最終出現在字符串中,因為您僅指定\n作為分隔符。

\r\n設置為定界符可以解決問題或更好\r?\n因為useDelimiter()的輸入是正則表達式, ? \r之后意味着\r是可選的,通過這種方式,它將與從 windows 編寫的文件和從類 unix 系統編寫的文件一起正常工作。

scanner.useDelimiter("\r?\n");

暫無
暫無

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

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