如何在Ruby中检测和转换DOS / Windows行结束行到UNIX行结束

我已经在Ruby(on Rails)中实现了一个CSV上传,当从类UNIX系统上运行的浏览器上传文件

不过,我有一个文件,由一个真正的客户上传包含着名的^ M行结束(我想这是从Windows上传)

我需要检测这种情况,并在文件处理之前replace字符

这是创build文件的代码

# 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”,这将解决问题?

在Ruby(和其他许多语言)中,CR(^ M就像你说的那样)char是"\r" ,所以如果你确定你的行尾也有LF字符(Windows使用CRLF作为行尾)可以删除行末尾的所有CR(在行末尾的$匹配,在最后一个"\n" ):

 uploadData.read.gsub /\r$/, '' 

如果你不确定你是否有LF(例如MacOS 9用于在行尾使用普通的CR),那么用LF替换任意一个CR,接着是LF:

 uploadData.read.gsub /\r\n?/, "\n"