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 閱讀(380) 評論(0)  編輯  收藏 所屬分類: SPRINGSRPING BATCH

          主站蜘蛛池模板: 博湖县| 开平市| 辽中县| 博野县| 安阳县| 社会| 安达市| 苏尼特右旗| 罗山县| 海林市| 铜川市| 上虞市| 郴州市| 大同县| 湘潭县| 海晏县| 浦北县| 阿克苏市| 佛教| 文安县| 苏尼特左旗| 嘉善县| 桓台县| 都昌县| 平度市| 洮南市| 陈巴尔虎旗| 建始县| 德格县| 广汉市| 信宜市| 北票市| 天津市| 读书| 贵港市| 图们市| 台东市| 营山县| 光山县| 石景山区| 治县。|