如何解决如何最好地处理同时包含DOS和UNIX行编码的csv文件
使用ruby 2.7。
当解析一个csv文件时,如果该文件是在unix-ish机器上创建的,然后在Windows机器上进行编辑,则我们可以得到一个文件,其中第1行以\n
终止,第2行为空白,以\r\n
终止,第3行也以\n
终止。这将导致CSV::MalformedCSVError (New line must be <"\n"> not <"\r"> in line 2.)
输入字符串是UTF-8编码的。
我在CSV类中找不到任何运气,因此我想到的2个选项是解析csv的每一行,这将是一个很大的重写,或者使用{{ 1}}。
当输入为UTF-8时,以下gsub()
多么疯狂。有没有更好的方法来处理错误?
gsub()
解决方法
在使用Ruby解析文件之前,请在文件上使用dos2unix
实用程序将所有行尾都转换为\n
。
看来字符串类对此具有辅助功能String#encode
。
irb(main):013:0> csv="name,value\n\r\nid,1"
irb(main):014:0> csv.encode(universal_newline: true)
=> "name,value\n\nid,1"
irb(main):015:0> CSV::parse(csv.encode(universal_newline: true))
=> [["name","value"],[],["id","1"]]
irb(main):016:0> csv="name,1\r\n\n\nfoo,bar\n\r\n\r\nwibble,42"
irb(main):017:0> CSV::parse(csv.encode(universal_newline: true))
=> [["name","1"],["foo","bar"],["wibble","42"]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。