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)  編輯  收藏 所屬分類: SPRING 、SRPING BATCH

          主站蜘蛛池模板: 乐亭县| 安化县| 永兴县| 建始县| 湖南省| 钟山县| 浠水县| 鄂托克旗| 昔阳县| 固安县| 岳阳市| 财经| 浠水县| 屯昌县| 叶城县| 吉林市| 泉州市| 临洮县| 博乐市| 宁武县| 西丰县| 吕梁市| 长阳| 安丘市| 威海市| 滨州市| 舟山市| 铜鼓县| 饶河县| 西城区| 焉耆| 潞西市| 建德市| 沿河| 凤庆县| 凉山| 新乡市| 恭城| 东丰县| 红河县| 托克逊县|