CSV文件是一种适合程序格式化输出数据的文件格式。它使用英文逗号作为列分隔符,文件可以直接用Excel打开。CSV的规则简单,便于程序输出;Excel对CSV的兼容性使得我们可以非常轻松的使用Excel提供的所有强大功能。

                唯一需要注意的地方就是CSV是使用英文逗号作为列分隔符的,所以当你输出的文本中含有英文逗号时就会被CSV认为是列分隔符,从而使得文件的现实格式与预想中的不同。因此,我们需要对内容进行转义。

                网上可以得到的关于CSV的转义大致可以总结为:

1.      如果一个单元内含有逗号,那么用半角双引号将内容包含,其中的逗号将不被识别为列分隔符;

2.      如果原内容中出现了半角双引号,便是用两个半角双引号转义。           

但是在实际操作中,就会发现如果某个单元内出现多个逗号,双引号,我们的规则便不对了。例如:

test,ma, "ma, ""go"", ""go"",""go"""

我们希望的输出格式是三列,但是Excel会显示为六列。我们的转义字符失效了。

test

 ma

 "ma

 ""go""

 ""go""

 ""go"""

 

之所以如此,通过我的分析,我认为CSV将每个逗号之间的内容作为首要参考标准。如果用逗号作分隔是可行的,那么Excel将不会做任何更多的处理。

看一个更简单的例子:

test,ma, "woshima, sldkl",

我们希望将其显示为三列,但是结果却是四列:

 

test

 ma

 "woshima

 sldkl"

 

由此可见,网上流传的转移规则并不完全。其根本原因在于,CSV只是一个技术规范,不同的程序对其有不同的支持;而且CSV本身的规范也是相当繁琐(http://zh.wikipedia.org/zh-cn/CSV )。如果希望用程序去实现这样的规范,那么CSV的简单性的优势将不复存在。

好了,说到这里,我们应该怎么做呢? 我个人认为,最好的办法就是规定一个特殊的字符串作为英文逗号的转义字符。

这样就一了百了。