开发的时候需要导出一批数据,为了方便使用的CSV格式。当时就只是简单的用逗号分隔,但是因为部分字段含有换行符、引号、逗号,导致用Excel打开的时候部分数据错位了,于是又将那几个字段处理了一下。
CSV文件本质是一种用逗号和(回车)换行符分割的文本文件,是可以直接中Excel打开的。
处理方式就是在这个字段前后添加双引号,并且将字段中原有的双引号替换为两个双引号。
/**
* @author pzzhao
* @version 创建时间:2022-5-8 14:46
*/
public class CsvUtils {
/**
* @description: 处理csv文件字段中需要转义的引号
* 添加双引号,防止被字段中的逗号和换行符干扰
* 使其显示为一个单元格
* @param value 待处理的字段值
* @return: {@link String}
* @author: pzzhao
* @date: 2022-05-08 14:49:46
*/
public static String processValueForCsv(String value) {
if (value == null) {
return "";
}
if (value.contains("\"")) {
value = value.replaceAll("\"", "\"\"");
}
value = "\"" + value + "\"";
return value;
}
}
网上有很多现成的CSV工具类的,使用的时候建议还是使用成熟的工具类,也就不用操心这些转义字符的问题了。hutool 工具类里就有现成的CsvUtil。我这个是懒得引用额外的包,所以就自己简单处理了。
下面附上CSV文件个规则:
- 开头是不留空,以行为单位。
- 可含或不含列名,含列名则居文件第一行。
- 一行数据不跨行,无空行。
- 以半角英文逗号(即,)作分隔符,列为空也要表达其存在。
- 列内容如存在半角引号(即"),替换成半角双引号(“”)转义,即用半角引号(即"")将该字段值包含起来。
- 文件读写时引号,逗号操作规则互逆。
- 内码格式不限,可为 ASCII、Unicode 或者其他。
- 不支持数字
- 不支持特殊字符