2011-01-26 14 views
29

各Rubyファイルに# encoding: UTF-8を自動的に追加する宝石はありますか?Ruby: "#encoding:UTF-8"を自動的に追加する方法は?

また、Ruby on Railsプロジェクト全体でエラー(invalid multibyte char (US-ASCII))が発生するのを防ぐ方法はありますか?(単一クラスではありません)

+3

これはあなたが尋ねたものではないが、それはいくつかのテキストエディタ(例えばemacsの)価値がある何のためにすると、自動的に「#encoding:UTF-8」を挿入しますが、UTF-8を含むルビーファイルを保存するときに一番上に。 – sepp2k

答えて

23

magic_encoding宝石を試してみてください、それはあなたのアプリケーション内のすべてのルビーのファイルにUFT-8魔法のコメントを挿入することができます。

[編集] 今度はSublimeTextに切り替えると、auto-encoding-for-rubyプラグインが使用されます。

+0

これは仕事かもしれないが、私はむしろ、これは依存しないことをさらに別の依存... –

+0

ノートを追加しないと思います、それはあなたのためにすべてのファイルを編集するツールです。あなたがしたい場合は後でアンインストールすることができます –

+0

これは[自動エンコードのためのルビー](https://atom.io/packages/auto-encoding-for-ruby)のAtomバージョンです – Zakwan

6

のVim:

:args **/*.ruby 
:set hidden 
:argdo norm! O# encoding: UTF-8 
:wqa 
+1

ありがとう!素晴らしい提案。私にとって、vimは書込み中に ':wqa'コマンドでクラッシュし(segfault)、書き込まれたファイルと.swpの束が生成されました。だから私は ':wa'、' 'q''は正常に動作しました。もちろん、後者があなたのルビー拡張であれば '.ruby'を' .rb'に変更してください。 –

+2

@William Denniss:もう1: 'argdo 0put = '#エンコーディング:UTF-8'' – Benoit

2

あなたは崇高テキスト2を使用している場合は、必要なときに自動的にエンコーディング宣言が含まれてプラグインを使用することができます:https://github.com/elomarns/auto-encoding-for-rubyを。

2

スクリプトの実行はどうですか?

#!/usr/bin/env ruby1.9.1 
require 'find' 

fixfile = [] 

Find.find('.') do |path| 
    next unless /\.rb$/.match(path); 
    File.open(path) do |file| 
    count = 0; 
    type = :lib 
    file.each do |line| 
     if count == 0 and /#!/.match(line) 
     type = :script 
     end 
     if /utf/.match(line) 
     break 
     end 
     if (count += 1) > 10 then 
     fixfile.push path:path, type:type 
     break 
     end 
    end 
    if file.eof? 
     fixfile.push path:path, type:type 
    end 
    end 
end 

fixfile.each do |info| 
    path = info[:path] 
    backuppath = path + '~' 
    type = info[:type] 
    begin 
    File.delete(backuppath) if File.exist?(backuppath) 
    File.link(path, backuppath) 
    rescue Errno::ENOENT => x 
    puts "could not make backup file '#{backuppath}' for '#{ path }': #{$!}" 
    raise 
    end 
    begin 
    inputfile = File.open(backuppath, 'r') 
    File.unlink(path) 
    File.open(path, 'w') do |outputfile| 
     if type == :script 
     line = inputfile.readline 
     outputfile.write line 
     end 
     outputfile.write "# encoding: utf-8\n" 
     inputfile.each do |line| 
     outputfile.write line 
     end 
     inputfile.close 
     outputfile.close 
    end 
    rescue => x 
    puts "error: #{x} #{$!}" 
    exit 
    end 

自動的にこれをあなたのRakefileに追加します。

file -bi #{path}を実行し、utf-8文字を含むファイルのみを更新する場合は、charset = utf-8を探してください。あなたのファイルが実際にUTF-8で保存されているときに、自動的に各Rubyのファイルに# encoding: UTF-8を追加

0

は、のみ意味があります。

ファイルがCP850(WindowsではAFAIKのデフォルト)にエンコードされ、非ASCII文字を使用する場合は、invalid multibyte char (US-ASCII)invalid multibyte char (UTF-8)に置き換えます。

それは本当にUTF-8である場合、私は、各ファイルを手動で変更し、チェックを好むだろう。

26

Ruby 2.0へのアップグレードに、それは魔法のコメントの必要性を取り除く、UTF-8のデフォルトエンコーディングになりますよう。

+1

レガシーコードがある場合は、必ずしも可能ではありません。 – Subimage

+0

@Subimage私は、ほとんどのレガシーコードが新しいバージョンのRubyで動作するはずだと考えていますが、他の方法は難しいです。 – Automatico

関連する問題