代码之家  ›  专栏  ›  技术社区  ›  Peter

Ruby中的行尾规范化

  •  28
  • Peter  · 技术社区  · 15 年前

    我有一个Ruby的字符串, s (比如)可能有任何标准的行尾( \n , \r\n , \r ). 我想把所有这些都转换成 \n

    这似乎是一个非常常见的问题,但相关文档并不多。显然,有简单而粗糙的解决方案,但有什么内置的处理方法吗?

    ^M 都是一样的。但仍有三起案件(看见 wikipedia .)

    4 回复  |  直到 11 年前
        1
  •  40
  •   Josh Lee ZZ Coder    15 年前

    最好只处理两种你想特别改变的情况,而不要试图变得太聪明:

    s.gsub /\r\n?/, "\n"
    
        2
  •  42
  •   Ana María Martínez Gómez    6 年前

    由于ruby 1.9,您可以使用 String::encode 具有 universal_newline: true 让你所有的新台词都进入 \n 在保持编码不变的情况下:

    s.encode(s.encoding, universal_newline: true)
    

    一旦处于已知的换行状态,您可以使用 :crlf_newline . 例如:将结尾未知(可能混合)的文件转换为 CRLF (例如),以二进制模式读取,然后:

    s.encode(s.encoding, universal_newline: true).encode(s.encoding, crlf_newline: true)
    
        3
  •  3
  •   Mikael S    15 年前

    s.gsub! /\r\n?/, "\n"
    
        4
  •  -10
  •   Ash    15 年前

    试着在NetBeans IDE上打开它们——在我从其他地方打开的一个项目上,它曾经问过我,如果我想修复行尾的话。我想可能有一个菜单选项来做这件事,但这将是我会尝试的第一件事。