paulwong

          csv 文件打開亂碼,有哪些方法可以解決?

          Excel 在讀取 csv 的時候是通過讀取文件頭上的 bom 來識別編碼的,這導致如果我們生成 csv 文件的平臺輸出無 bom 頭編碼的 csv 文件(例如 utf-8 ,在標準中默認是可以沒有 bom 頭的),Excel 只能自動按照默認編碼讀取,不一致就會出現亂碼問題了。

          掌握了這點相信亂碼已經無法阻擋我們前進的步伐了:只需將不帶 bom 頭編碼的 csv 文件,用文本編輯器(工具隨意,推薦 notepad++ )打開并轉換為帶 bom 的編碼形式(具體編碼方式隨意),問題解決。

          當然,如果你是像我一樣的碼農哥哥,在生成 csv 文件的時候寫入 bom 頭更直接點,用戶會感謝你的。

          附錄:對于 utf-8 編碼,unicode 標準中是沒有 bom 定義的,微軟在自己的 utf-8 格式的文本文件之前加上了EF BB BF三個字節作為識別此編碼的 bom 頭,這也解釋了為啥大部分亂碼都是 utf-8 編碼導致的原因

          SPRING BATCH中生成CSV文件時的解決方案:
          new FlatFileItemWriterBuilder<T>()
                .name(itemWriterName)
                .resource(outputResource)
                .lineAggregator(lineAggregator)
                .headerCallback(
                h -> {
                         System.out.println(header);
                         h.write('\uFEFF');//只需加這一行
                         h.write(header);
                     }
                )
                .build();

          https://stackoverflow.com/questions/48952319/send-csv-file-encoded-in-utf-8-with-bom-in-java

          posted on 2021-03-23 10:30 paulwong 閱讀(376) 評論(0)  編輯  收藏 所屬分類: SPRINGSRPING BATCH

          主站蜘蛛池模板: 郴州市| 新泰市| 壶关县| 南召县| 利辛县| 白山市| 遵义市| 丹巴县| 登封市| 沙田区| 洛阳市| 化州市| 大同市| 靖安县| 昌乐县| 义马市| 云龙县| 加查县| 岑巩县| 比如县| 富民县| 金川县| 获嘉县| 安吉县| 克什克腾旗| 普兰店市| 盖州市| 门源| 云南省| 津市市| 滁州市| 中西区| 临朐县| 洛隆县| 玉田县| 砀山县| 噶尔县| 布尔津县| 金湖县| 吴堡县| 成安县|