1.EXCEL比较特殊,使用的是UTF-8 BOM的格式,而使用apache Commons csv library用的是UTF-8,会使中文乱码.
2.解决办法有二:
核心是写入byte[]的头:{ (byte) 0xEF, (byte) 0xBB, (byte) 0xBF }
第一种是先新建一个文件,写入头,然后再拼接CSVPrinter的内容:
//Add UTF-8 BOM header File csvFile = new File(csv_path); try { fos = new FileOutputStream(csvFile, false); fos.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF }); fos.flush(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //Write CSV try (Writer out = new FileWriter(csv_path,true); CSVPrinter printer = new CSVPrinter(out, CSVFormat.EXCEL.withQuote(null).withHeader( csvSP.getSearchTime(),searchCriteria )); CSVPrinter printers = new CSVPrinter(out, CSVFormat.EXCEL.withHeader( Constant.Col_REQ_ID,Constant.Col_SENDER_DOMAIN,Constant.Col_SENDER,Constant.Col_RECEIVER_DOMAIN, Constant.Col_RECIPIENT,Constant.Col_RECIPIENT_IMEI,Constant.Col_RECIPIENT_OPER_CODE,Constant.Col_DIRECTION, Constant.Col_CHANNEL,Constant.Col_SUBMIT_TIME,Constant.Col_DELIVER_TIME,Constant.Col_MSG_STATUS, Constant.Col_TEXT_CONTENT,Constant.Col_MEDIA_FILE )) ) { for (CsvModel csv : csvResult) { List<String> records = new ArrayList<>(); records.add(csv.getRequestId()); records.add(csv.getSenderDomain()); records.add(csv.getSenderNo()); printers.printRecord(records); }
通过new FileWriter(csv_path,true)保持原来内容并拼接.
第二种则完全不用Commons,自己拼接:
public static void SaveInformativeFile(String content, String Path, String fileName, boolean isFirst) { OutputStreamWriter fw = null; BufferedWriter writer = null; if (content == null || content.equals("")) { return; } try { String filepath = Path + File.separator + fileName; File informativeFile = new File(filepath); FileOutputStream fos = null; if (isFirst) { fos = new FileOutputStream(informativeFile, false); fos.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF }); fos.flush(); } else { fos = new FileOutputStream(informativeFile, true); } fw = new OutputStreamWriter(fos, "UTF-8"); writer = new BufferedWriter(fw); if (isFirst) { String title = "\"" + "ZONE" + "\",\"" + "TACKING ID" + "\",\"" + "CAMPAIGN CD" + "\",\"" + "CHANNEL" + "\",\"" + "SMS SENDER" + "\",\"" + "START DATE" + "\",\"" + "END DATE" + "\",\"" + "MESSAGE CODE" + "\"" + "\n"; writer.write(title); writer.flush(); } writer.write(content); writer.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (writer != null) { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } }
相关推荐
Java避免UTF-8的csv文件打开中文出现...Java避免UTF-8的csv文件打开中文出现乱码的方法是使用UTF-16LE编码格式,并在文件头部输出BOM。同时,需要考虑Excel版本的兼容性问题,以确保csv文件可以正确地被打开和读取。
这是因为Excel默认可能不支持或识别UTF-8编码,尤其是不带BOM(Byte Order Mark)的UTF-8文件。解决这个问题的方法是将这些文件转换为Excel更友好的ANSI编码。 在提供的文件列表中,有两个批处理脚本文件: 1. `run...
标题"将csv文件ANSI格式转UTF-8"指的是一个转换过程,其中ANSI是Windows操作系统中默认的编码格式,通常代表本地化版本的ASCII,而UTF-8是一种更通用的Unicode编码,可以表示世界上几乎所有的字符集。 描述中的...
添加或删除 xml CSV UTF-8 bom头文件
在UTF-8编码中,BOM是一个由三个字节组成的序列:0xEF, 0xBB, 0xBF,它位于文件的开头,用来表明该文件采用的是UTF-8编码。在C#编程中,有时我们需要在写入UTF-8文件时添加这个BOM头,以确保其他程序或系统能正确...
CSV-EXCEL-PDF-WORD 各种文件格式互转 CSV-EXCEL-PDF-WORD 各种文件格式互转 CSV-EXCEL-PDF-WORD 各种文件格式互转 CSV-EXCEL-PDF-WORD 各种文件格式互转 CSV-EXCEL-PDF-WORD 各种文件格式互转 CSV-EXCEL-PDF-WORD ...
Python 简单使用 pandas 读取excel 的 csv文件处理,支持utf-8和gbk编码自动识别。
"BOM"是Byte Order Mark的缩写,UTF-8的BOM头是一个特殊的三位字节序列(0xEF, 0xBB, 0xBF),用于标识文件是以UTF-8编码的。然而,在某些情况下,这个BOM头可能会引起问题,例如在编程或文本处理时,因此我们需要...
如果频繁处理UTF-8文件,可以考虑使用如`VBA7.Filesystem`这样的库,它提供了对UTF-8文件更方便的支持。 7. **实际应用** 这种技术在处理CSV文件、日志文件或从网络下载的文本数据时非常有用,特别是当这些数据...
BOM是UTF-8、UTF-16和UTF-32等编码格式中的一个可选标记,用于告知解析器文件的编码类型。例如,UTF-8的BOM是三个字节(0xEF, 0xBB, 0xBF),而UTF-16LE和UTF-16BE的BOM分别是两个字节(0xFF, 0xFE)和(0xFE, 0xFF...
在这个场景中,我们讨论的是一个专门用于批量转换的工具,它支持GBK和UTF-8这两种常见的字符编码格式。 GBK编码是GB2312编码的扩展,主要在中国大陆广泛使用,涵盖了大部分简体中文字符。UTF-8则是一种国际通用的...
ANSI --> UTF-8 Unicode --> ANSI Unicode --> UTF-8 UTF-8 --> ANSI UTF-8 --> Unicode UTF-8 --> Unicode big endian ansi转别的,不检验BOM,一律作为ansi编码进行转换 unicode转别的,首先检验BOM,不合格不...
3. **数据库连接**:在连接MySQL等数据库时,应设置字符集为`utf8mb4`,这是MySQL对UTF-8的扩展,支持四字节的Unicode字符,包括表情符号。 4. **HTML meta标签**:在HTML文档的`<head>`部分添加`<meta charset="...
java实现批量excel转csv,其中csv文件为utf-8格式,支持直接导入数据库。
例如,"phonebook_export_unicode_L.csv"可能是使用UTF16LE编码的电话簿数据,而"phonebook_export_utf8.csv"和"phonebook_export_utf8_noBOM.csv"则是使用UTF8编码的,后者没有BOM。 在实际应用中,例如在跨平台的...
python使用pandas,根据输入分组名,自动分割csv文件,并存储为utf-8格式,多少种分组就自动存多少个文件,即开即用 也可做为pandas操作csv文件的学习材料,代码几乎每条语句都有注释
- 在处理国际化内容时,UTF-8编码是标准选择,因为它支持几乎所有的字符集,包括中文字符。 - 如果JMeter的源码不是以UTF-8编码,可能会导致在处理包含非ASCII字符的请求或响应时出现乱码。 - 修改为UTF-8编码后...
UTF-8是一种广泛支持的编码格式,可以正确表示大多数语言的字符,包括中文。 - 如果在读取CSV文件时使用了错误的编码(如GBK或ISO-8859-1),则会导致中文字符显示为乱码。 2. **Java读取CSV文件**: - 使用`...
### Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题 #### 一、背景介绍 在处理包含非英文字符的数据时,尤其是使用 Python 的 `csv` 模块来操作 CSV 文件时,可能会遇到字符编码问题,导致中文等非英文...