Issue #8329 has been reported by mghomn (Justin Peal).

----------------------------------------
misc #8329: Cannot change \r\n to \n (Windows/DOS to Unix)
https://bugs.ruby-lang.org/issues/8329

Author: mghomn (Justin Peal)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 


I want to change all of my ruby files to UTF-8 encoded and Unix format, but after the running of the following program, the files' formats are still Windows/DOS (\r\n) but not Unix (\n). How could I do?
===============================
class String
  def utf8?
    self =~ /\A\p{Assigned}*\z/
  rescue
    false
  end
end

class Tounix
  def replace text
    text.gsub(/\x0d\x0a/, "\n")
  end

  def load filename_rb
    text = File.read(filename_rb, :mode => 'rt:bom|utf-8')
    unless text.utf8?
      text = File.read(filename_rb, :mode => 'rt:gb18030')
      text = text.encode('utf-8')
    end
    text
  end

  def save filename_rb, new_text
    File.write(filename_tm = filename_rb + '.t~m~p', new_text, :mode => 'wb:utf-8')
    File.rename(filename_tm, filename_rb)
  end

  def parse filename_rb
    text = load(filename_rb)
    new_text = replace(text)
    save(filename_rb, new_text) if changed = (new_text != text)
    yield changed if block_given?
  end

  def search pattern
    Dir.glob(pattern) do |filename_rb|
      parse(filename_rb) do |changed|
        yield filename_rb, changed if block_given?
      end
    end
  end
end

if $0 == __FILE__
  Tounix.new.search('**/*.rb') do |filename_rb, changed|
    print '%-9s' % (changed ? 'Changed' : ''), filename_rb, "\n"
  end
end



-- 
http://bugs.ruby-lang.org/