本文由华为云社区分享《CSV—简单格式下隐藏的那些坑-云社区-华为云》,作者:aKi。
前言
CSV(逗号分隔值)是一种通用且相对简单的文件格式。文件可以包含任意数量的表格数据记录。每条记录用作字段之间的分隔符。是一个分隔符。
示例:下面是一个包含3 行内容的CSV 文件。
CSV 格式广泛用于在程序之间传输表数据。由于这些程序的格式不兼容,因此CSV 是最好的中间格式之一,并且大多数程序也支持CSV 导入和导出。数据。例如,从程序A 导出CSV 文件并将该文件导入程序B。这个过程虽然看似简单,但也隐藏着很多陷阱。让我们看一下三个常见的陷阱。
坑一:换行和逗号
我们前面提到,CSV 文件中的每条记录都用换行符分隔,并且通常使用逗号作为分隔符。然而,当您实际处理数据时,字段中会出现换行符和逗号。如果程序A没有正确处理相应的数据,则在导入程序B时会生成错误的数据或记录。
示例:在下面的CSV 文件的第二行记录中,第四个字段包含一个逗号和一个换行符。
您可以使用Excel 工具查看解析后文件的外观。
处理数据的正确方法是将包含逗号和换行符的字段括在双引号中。
解析出对应的文件后:
为了扩展,如果字段本身有双引号,则必须在字段本身的双引号前添加双引号。
例如,在Airplane 之前添加双引号来表示字段本身的数据。
当您使用本文中的工具打开该文件时,它看起来像这样:
坑二:BOM头
CSV 文件通常以更常见的UTF-8 格式进行编码。此问题很可能是由自动添加BOM 标头引起的。在Windows 上编辑CSV 文件。如果程序B没有正确处理BOM头,就会认为BOM头是字段的一部分,而直接观察CSV文件是不会发现这个错误的。
例如,这里有两个内容完全相同的文件。
如果一个包含BOM 标头而另一个不包含,则二进制表示形式会有所不同。
包含BOM 标头的文件在文件开头有额外的3 个字节的数据。处理方法也很简单,只需将文件保存为无BOM格式即可。
坑三:CSV注入
CSV注入实际上是一个安全漏洞。当在Excel工具中打开CSV文件时,其字段数据由Excel解析,因此它支持Excel提供的所有动态功能。
让我们看一下下面的例子。
我将其中一个字段写为=1+1 并在Excel 工具中打开该文件。
=1+1解析为2
同样,该漏洞可用于执行任意程序。
在Excel中打开时,出现以下提示:
单击“是”运行计算程序。
当然,较新版本的Excel 默认情况下禁用了此漏洞。默认情况下,在“文件”-“选项”-“信任中心”的外部内容设置中,未选中“启用动态数据交换服务器启动”。
以上是我在处理CSV数据时遇到的陷阱。希望读者遇到类似问题时,能够快速拿出原因和解决方案,不要在坑里停留太久。
点击下方抢先了解华为云新技术~
华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云
原创文章,作者:小条,如若转载,请注明出处:https://www.sudun.com/ask/81764.html