From: "nobu (Nobuyoshi Nakada)" Date: 2013-04-26T16:18:47+09:00 Subject: [ruby-core:54599] [ruby-trunk - misc #8329][Rejected] Cannot change \r\n to \n (Windows/DOS to Unix) Issue #8329 has been updated by nobu (Nobuyoshi Nakada). Status changed from Open to Rejected This BTS is not to ask about your bugs, but language specs and implementations. As for you bug, newline code is already converted by reading in text mode. ---------------------------------------- misc #8329: Cannot change \r\n to \n (Windows/DOS to Unix) https://bugs.ruby-lang.org/issues/8329#change-38921 Author: mghomn (Justin Peal) Status: Rejected 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/