我在Ruby(在Rails上)实现了CSV上传,当从类UNIX系统上运行的浏览器上传文件时,该文件正常工作
但是我有一个由真实客户上传的文件包含着名的^ M作为行尾(我猜它是从Windows上传的)
我需要检测这种情况并在处理文件之前替换字符
以下是创建文件的代码
# create the file on the server
path = File.join(directory, name)
# write the file
File.open(path, 'wb') { |f| f.write(uploadData.read) }
我是否需要更改" wb"到" w"这会解决问题吗?
答案 0 :(得分:0)
在Ruby(和许多其他语言)中,CR(^ M,如你所说)char是"\r"
,所以如果你确定你的行结尾也有LF char(Windows使用CRLF作为行然后你可以删除行尾的所有CR($
匹配行的最后一行"\n"
):
uploadData.read.gsub /\r$/, ''
如果您不确定自己是否会使用LF(例如,MacOS 9曾经在线路末端使用普通CR),那么可以替换任意CR,然后替换LF和LF:
uploadData.read.gsub /\r\n?/, "\n"