csv是什么格式的文件(修改csv文件编码格式)

前言

CSV(Comma-Separated Values),是一种通用的、相对简单的文件格式。其文件以纯文本形式存储表格数据,文件可由任意数目的记录组成,记录间以换行符分隔,每条记录由字段组成,字段间的分隔符是特定字符或字符串,最常见的是以逗号作为分隔符。

例如:下面是一个含有三行内容的csv文件。

csv是什么格式的文件(修改csv文件编码格式)

 

CSV格式广泛应用于程序之间转移表格数据,这些程序在格式上是不兼容的,在没有高效的数据迁移工具时,CSV就成为最好的中间格式之一,因此大部分程序也都支持CSV数据的导入和导出。例如,从A程序导出CSV文件,再将该文件导入至B程序。这一过程看似简单,但其中也存在着不少隐含的坑,下面我们就来盘点一下常见的三种坑。

坑一:换行和逗号

前文中我们提到过CSV文件中每条记录是通过换行符分隔的,常用逗号作为分隔符。但在实际处理数据时会遇到字段中也存在换行和逗号的情况,如果A程序没有处理好对应的数据,在导入B程序时就会产生错误的数据或记录。

例如:下面CSV文件中第二行的记录中第四个字段中包含逗号和换行。

csv是什么格式的文件(修改csv文件编码格式)

 

我们可以使用Excel工具来查看该文件文解析后的样子:

csv是什么格式的文件(修改csv文件编码格式)

 

正确的数据处理方式是将包含逗号和换行的字段用双引号包围起来:

csv是什么格式的文件(修改csv文件编码格式)

 

对应文件被解析后:

csv是什么格式的文件(修改csv文件编码格式)

 

拓展一下,字段中的若本身就存在双引号,需要在字段自身的双引号前再加一个双引号。

比如我们在Airplane前加一个双引号表示字段本身的数据:

csv是什么格式的文件(修改csv文件编码格式)

 

该文件使用本文工具打开以后是这样的:

csv是什么格式的文件(修改csv文件编码格式)

 

坑二:BOM头

很多时候CSV文件的编码格式都是较为常见UTF-8格式,UTF-8格式存在BOM头的问题,这种问题大部分原因是在Windows下编辑CSV文件时被自动加上了BOM头。如果程序B没有处理好BOM头,会导致将BOM头也被当做字段的一部分,而且这种错误无法通过直接观察CSV文件来发现。

例如这里是两个内容完全相同的文件:

csv是什么格式的文件(修改csv文件编码格式)

 

当一个包含BOM头,另一个不包含时,其二进制表达是不一样的:

csv是什么格式的文件(修改csv文件编码格式)

 

包含BOM头的文件在文件开始位置多了3个字节数据。处理方式也很简单,将文件以无BOM的形式保存就行。

坑三:CSV注入

CSV注入其实是一个安全漏洞,当CSV文件被Excel工具打开时,其字段数据被Excel解析,从而支持了Excel提供的所有动态功能。

下面我们来看一个例子:

csv是什么格式的文件(修改csv文件编码格式)

 

我们将其中一个字段写成了=1+1,此时用Excel工具打开该文件:

csv是什么格式的文件(修改csv文件编码格式)

 

=1+1被解析成了2

同理,利用此漏洞还可以执行任意程序。

csv是什么格式的文件(修改csv文件编码格式)

 

用Execl打开时会出现如下提示:

csv是什么格式的文件(修改csv文件编码格式)

 

点击是后便会运行计算器程序

csv是什么格式的文件(修改csv文件编码格式)

 

当然,该漏洞在较新版本的Excel中都被默认禁止了。在文件->选项->信任中心中外部内容设置中默认都是不勾选“启用动态数据交换服务器启动”。

csv是什么格式的文件(修改csv文件编码格式)

 

以上就是我在处理csv数据时遇到过的坑,希望读者们在遇到类似问题时能第一时间想到原因和解决方案,避免在坑里徘徊太久。

版权声明:本文内容由网友提供,该文观点仅代表作者本人。本站(http://www.zengtui.com/)仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 3933150@qq.com 举报,一经查实,本站将立刻删除。

版权声明:本文内容由作者小航提供,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至907991599@qq.com 举报,一经查实,本站将立刻删除。如若转载,请注明出处:http://www.hangzai.com/324060.html

(0)
小航的头像小航

相关推荐