CSV文件的转义处理

                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的简单性的优势将不复存在。

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

这样就一了百了。

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值