在字段中使用特殊字符创buildCSV文件

我已经find了类似的问题在stackoverflow,但我还没有find任何。 我想导出CSV格式的表格,以便将其导入到Excel中。 每个单元格包含文本,每行都有相同的列数。 我试过的格式如下:

"d1"|"d2"|"d3"|"d4" 

其中d1,d2,d3,d4是我想要放在每个单元格中的原始string。 我有以下问题:

  1. | 可以包含在数据中。 这真的是个问题吗? 也许不是因为我在string周围有双引号。 也许我甚至可以使用逗号,这不会有所作为。
  2. “本身可以被包含在数据中,我应该以某种方式逃避它吗?我现在的解决scheme是在把双引号括起来之前,从原始string中删除前导和尾随的双引号,似乎可行,但我认为逃避内部双引号将是更清洁的。你知道如何做到这一点?
  3. 数据也可以包含换行符。 我希望Excel将数据保存在一个单元格中,并根据换行符格式化该单元格中的文本。 目前情况并非如此:Excel将换行符解释为终止logging,并在导入的表中添加额外的行。

你有什么想法如何解决上述问题? 有关于这些具体问题的在线文档吗? 我从昨天开始搜寻,但没有find任何东西。

Excel在值中支持换行符。 例如,使用Excel用户界面,可以通过为每个换行符inputAlt-Enter来将"foo\n\bar\nbaz"放到单元格中。

关于Excel的棘手问题是,在逗号用作小数点的语言环境中,Excel使用冒号作为字段分隔符。 没有任何Excel将读取的通用/国际格式。

如果在Java中没有用于读取/写入CSV文件的包,我会感到非常惊讶。 Python有一个允许你在input和输出上指定分隔符,引号char,logging分隔符等。

但是,如果您想编写自己的代码,请针对您要编写的每一行执行以下伪代码:

 for each field in the row: if field contains quotechar: double all quotechars in field field = quotechar + field + quotechar else if field contains delimiter, CR, or LF: field = quotechar + field + quotechar else: avoid waste of space and ugly visual impact by NOT doing unneeded quoting join field strings separated by delimiter append CR LF write the row string using binary mode (so Windows runtime doesn't give you 2xCR) 

注意(1)以上所有都是以8位字符为前提的(2)我避免使用含义不清的术语“换行符”。

我发现CSV最好用逗号分隔来完成,并且在值中引用逗号作为逗号不会被误解。 引用引号是用双引号完成的。 所以以下四个值:

 one two three with "quoted" value four 

变为:

 one,two,"three with ""quoted"" value",four 

我不相信标准的CSV实现可能支持值的换行符; 特别是不在Excel中。 尝试使用换行符在Excel中创build单元格(甚至有可能吗?)并保存为CSV以查看是否有效。

http://en.wikipedia.org/wiki/Comma-separated_values