首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何为CSV文件同时转义逗号和双引号?

如何为CSV文件同时转义逗号和双引号?
EN

Stack Overflow用户
提问于 2012-05-04 23:31:36
回答 6查看 183K关注 0票数 72

我正在编写一个Java应用程序将数据从Oracle导出到csv文件

不幸的是,数据的内容可能相当棘手。逗号仍然是分隔符,但行中的某些数据可能如下所示:

代码语言:javascript
复制
| ID    |   FN    |   LN   |  AGE   |  COMMENT                   |
|----------------------------------------------------------------|
| 123   |  John   |  Smith |   39   | I said "Hey, I am 5'10"."  |
|----------------------------------------------------------------|

因此,这是comment列中的一个字符串:

我说:“嘿,我身高5英尺10英寸。”

不是开玩笑,我需要在excel或open office中显示上面的注释,而不是用Java生成的CSV文件,当然也不能搞乱其他常规的转义情况(即常规的双引号和元组中的常规逗号)。我知道正则表达式很强大,但是在这样复杂的情况下,我们如何才能达到这个目的呢?

EN

回答 6

Stack Overflow用户

发布于 2012-05-04 23:34:32

Excel必须能够处理完全相同的情况。

将这些内容放到Excel中,将它们保存为CSV,然后使用文本编辑器检查文件。然后,您就会知道Excel应用于这些情况的规则。

使Java产生相同的输出。

顺便说一句,Excel使用的格式是发布的。

*编辑1:*以下是Excel的功能

*编辑2:*请注意,如果你使用“作为附件”,php的fputcsv会和excel做同样的事情。

代码语言:javascript
复制
rdeslonde@mydomain.com
Richard
"This is what I think"

转换为以下内容:

代码语言:javascript
复制
Email,Fname,Quoted  
rdeslonde@mydomain.com,Richard,"""This is what I think"""
票数 35
EN

Stack Overflow用户

发布于 2012-05-07 21:40:25

感谢Tony和Paul的快速反馈,这非常有帮助。实际上,我通过POJO找到了一个解决方案。这就是它:

代码语言:javascript
复制
if (cell_value.indexOf("\"") != -1 || cell_value.indexOf(",") != -1) {
    cell_value = cell_value.replaceAll("\"", "\"\"");
    row.append("\"");
    row.append(cell_value);
    row.append("\"");
} else {
    row.append(cell_value);
}

简而言之,如果单元格旁边的字符串中有逗号或双引号之类的特殊字符,则首先通过添加额外的双引号(如"\"\"")来转义双引号("\""),然后将整个内容放入双引号(如"\""+theWholeThing+"\"" )中

票数 15
EN

Stack Overflow用户

发布于 2012-05-07 21:47:31

您还可以查看Python writes Excel-compatible csv files.是如何

我相信Excel的默认设置是双引号字符-也就是说,字面引号"被写成""

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10451842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档