如何在Ruby中检测并将DOS / Windows行尾转换为UNIX行尾

时间:2015-02-13 20:46:10

标签: ruby-on-rails ruby windows unix

我在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"这会解决问题吗?

1 个答案:

答案 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"