paulwong

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

          Excel 在讀取 csv 的時(shí)候是通過讀取文件頭上的 bom 來識別編碼的,這導(dǎo)致如果我們生成 csv 文件的平臺輸出無 bom 頭編碼的 csv 文件(例如 utf-8 ,在標(biāo)準(zhǔn)中默認(rèn)是可以沒有 bom 頭的),Excel 只能自動(dòng)按照默認(rèn)編碼讀取,不一致就會(huì)出現(xiàn)亂碼問題了。

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

          當(dāng)然,如果你是像我一樣的碼農(nóng)哥哥,在生成 csv 文件的時(shí)候?qū)懭?bom 頭更直接點(diǎn),用戶會(huì)感謝你的。

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

          SPRING BATCH中生成CSV文件時(shí)的解決方案:
          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

          主站蜘蛛池模板: 明水县| 玉环县| 东乡| 华蓥市| 东至县| 樟树市| 普安县| 绥化市| 桐柏县| 永昌县| 金平| 怀仁县| 沁源县| 常熟市| 大同县| 镶黄旗| 侯马市| 东乌珠穆沁旗| 阜宁县| 平原县| 郯城县| 鸡东县| 玛沁县| 榕江县| 莒南县| 迁西县| 巴塘县| 通化县| 长寿区| 天气| 原阳县| 甘肃省| 日喀则市| 南陵县| 石渠县| 城市| 敦化市| 天柱县| 陕西省| 吴旗县| 黄龙县|