正确生成csv文件

正确生成csv文件

项目上需要通过Java程序生成csv文件进行数据传递。但是由于传递的文本中包含英文逗号,双引号,换行符这样的特殊字符,导致生成的csv文件被对方系统解析时经常串列。
查询资料后发现需要对这些特殊字符做特殊处理才可以。

特殊字符 处理方式 例子
英文逗号 如果包含英文逗号,需要将这一列的内容用双引号括起来 abc,d -> "abc,d"
换行符 如果包含换行符,需要将这一列的内容用双引号括起来 abc\nd -> "abc\nd"
双引号 如果包含双引号,需要在双引号前面再加一个双引号作为转义,同时将这一列的内容用双引号括起来 a"bcd -> "a""bcd"

想起之前在EBS的项目上也会有写通用导入程序,上传一个csv文件然后解析csv文件并存储进数据库表,感觉也会遇到同样的特殊字符的问题。回去翻了一下通用导入的处理代码,发现确实是加了这个逻辑的处理。
大致逻辑如下:

readline = 从附件中读取一行
if 这一行中双引号的个数为奇数 then
line = readline & 换行符 & nextline
else
line = readline
end if

position = 0
column = 0
while position <=line.length()
    comma_position = 从position开始找到下一个应该是分隔符的逗号符号的位置(在这个逗号前没有双引号或者有双数的双引号)或者是line的最后一个位置
    string_arrary[column] = line 里面从postion 到 comma_postion中间的字符,如果字符串的开头结尾都是双引号,则去除头尾的双引号,然后把两个双引号替换成一个双引号
    postion = comma_postion + 1   

最后,不得不说,还是Python香, import csv啥都搞定了

参考 Common Format and MIME Type for Comma-Separated Values (CSV) Files

你可能感兴趣的:(正确生成csv文件)