我正在编写一个Java应用程序,用于将数据从Oracle导出到csv文件
不幸的是,数据的内容可能非常棘手 . 仍然逗号是deliminator,但行上的一些数据可能是这样的:
ID FN LN AGE评论123,约翰,史密斯,39岁,我说“嘿,我是5'10” . “
所以这是 comment
列上的字符串之一:
我说“嘿,我5'10” . “
不开玩笑,我需要在excel或开放式办公室中从Java生成的CSV文件中显示上述评论而不妥协,当然也不能搞乱其他常规的转义情况(即常规双引号和元组中的常规逗号) . 我知道正则表达式很强大,但我们怎样才能在如此复杂的情况下实现目标呢?
6 回答
将其保存到csv文件并查看结果,因此双引号用于转义自身
Important Note
会给你一个不同的结果,因为逗号后面有一个空格,这将被视为“
感谢Tony和Paul的快速反馈,非常有帮助 . 我实际上通过POJO找到了解决方案 . 这里是:
简单地说如果单元格中的字符串中有逗号或双引号等特殊字符,那么首先通过添加额外的双引号(如
"\"\""
)来转义双引号("\""
),然后将整个事物放入双引号(如"\""+theWholeThing+"\""
)Excel必须能够处理完全相同的情况 .
将这些内容放入Excel,将它们保存为CSV,然后使用文本编辑器检查文件 . 然后你就会知道Excel适用于这些情况的规则 .
使Java生成相同的输出 .
顺便发布Excel使用的格式......
****编辑1:****这是Excel的作用
****编辑2:****请注意,如果使用“作为附件,php的
fputcsv
与excel完全相同 .变成了这个:
你也可以看看如何Python writes Excel-compatible csv files.
我相信Excel的默认值是文字引号字符加倍 - 也就是说,字面引号
"
被写为""
.有几个图书馆 . 以下是两个例子:
❐ApacheCommons Lang
Apache Commons Lang包含一个特殊类来转义或转换字符串(CSV,EcmaScript,HTML,Java,Json,XML):org.apache.commons.lang3.StringEscapeUtils .
❐OpenCSV
如果您使用OpenCSV,则无需担心转义或unescape,仅用于写入或读取内容 .
这将保留CSV文件中的逗号