在字段中创建包含特殊字符的CSV文件

时间:2011-10-27 11:45:32

标签: excel csv utf-8

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

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

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

  1. |可以包含在数据中。这真的是个问题吗?也许不是因为我在字符串周围有双引号。也许我甚至可以使用逗号,但它不会产生任何影响。
  2. “本身可以包含在数据中。我应该以某种方式逃避它吗?我目前的解决方案是在将我的双引号括起来之前从原始字符串中删除前导和尾随双引号它似乎有效,但我认为逃避内部双引号会更清晰。你知道怎么做吗?
  3. 数据也可以包含换行符。我希望Excel将数据保存在一个单元格中,并根据换行格式化该单元格中的文本。目前情况并非如此:Excel将换行符解释为终止记录并在导入的表中添加额外的行。
  4. 您是否知道如何解决上述问题?是否有一些关于这些具体问题的在线文档?我从昨天开始一直在搜索,但没有找到任何东西。

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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)我避免使用“新行”这个不明确的术语。

答案 1 :(得分:1)

我发现CSV最好用逗号分隔,并引用值,这样逗号的值不会被误解。引用引号是通过双引号完成的。所以有以下四个值:

one
two
three with "quoted" value
four

变为:

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

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

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