所以你想写你自己的CSV代码?用逗号分隔的字段和用换行符分隔的行。很简单,对吧?您可以只用几行代码就可以自己编写代码。
字段中的每个引用实例都需要加倍,上帝保佑您不要忘记用引号将字段括起来。
还要确保不要将带引号的空字段(.,";";,.)。双引号。
例如:字段中的换行符与行尾的换行符不同。
末尾有没有空栏,或者那只是一个多余的逗号?
如果您得到的CSV总是在逗号后有一个空格,但它不是数据的一部分,那该怎么办呢?
有些国家使用逗号作为小数分隔符,而不是冒号。在这些国家/地区,Excel将生成以分号为分隔符的CSV。某些文件使用制表符而不是逗号来避免此特定问题。有些甚至使用不可显示的ASCII字符。
在读取任意CSV文件时,不要忘记将其考虑在内。不,没有指示文件使用哪个分隔符。
某些程序(包括Excel)在从磁盘读取文件和从Web读取文件时会采用不同的分隔符。一定要给它一个正确的!
程序不可能神奇地知道文件使用的是什么编码。有些将根据机器的区域设置使用编码。
这意味着,如果您在一台计算机上保存CSV,然后在另一台计算机上打开它,它可能会悄悄损坏数据。
在所有字节顺序掩码都可以确定所使用的Unicode编码之后,这就是它们的作用,对吗?(实际上,它们是用来确定字符顺序的,但我不会深入讨论这一点)。
如果包含BOM表,Excel会将CSV解释为文本文件,而不是CSV。这意味着不处理行内的换行。
CSV不是定义良好的文件格式。RFC4180并不代表现实。似乎每个程序处理CSV的方式都略有不同。请不要把另一个强加给这个世界。使用实心库。
如果您完全控制CSV提供商和供应商以及他们发出的数据,您将能够构建可靠的自动化系统。
如果提供的csv是任意的,确保数据正确的唯一真正方法是用户检查它,并最终指定分隔符、引用规则…。除非您最终可能会出现错误或更糟的静默损坏的数据。
在现实世界中编写处理文件的CSV代码是一项艰巨的任务。兔子洞很深。Ruby CSV库是2321行。