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

4

我在Ruby(on 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个回答

2

CR(如您所说的)字符在Ruby(以及许多其他语言)中为"\r",因此如果您确定您的行尾也有LF字符(Windows使用CRLF作为行尾),那么您可以只删除所有行末的CR($匹配行末,在最后一个"\n"之前):

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

如果您不确定是否使用LF(例如,MacOS 9以前在行末使用纯CR),则请将任何可能跟随CR的可选CR替换为LF:
uploadData.read.gsub /\r\n?/, "\n"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接