【问题标题】:How to detect and convert DOS/Windows end of line to UNIX end of line in Ruby如何在 Ruby 中检测 DOS/Windows 行尾并将其转换为 UNIX 行尾
【发布时间】:2015-02-14 05:42:37
【问题描述】:

我在 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”才能解决问题?

【问题讨论】:

    标签: ruby-on-rails ruby windows unix


    【解决方案1】:

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

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

    如果您不确定是否要使用 LF(例如,MacOS 9 过去在行尾使用纯 CR),则将任何 CR 替换为可选地后跟 LF 的 LF:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多