- ベストアンサー
Rubyのエンコードについて
- sublime text 2を使用している場合、Rubyのエンコードに関するエラーが発生する可能性があります。
- プログラムの行頭で# encoding: UTF-8と指定してもエラーが解消されない場合、プログラムの実行時に-ruby -E UTF-8と指定する必要があります。
- エンコードのエラーが出るプログラムは、正規表現の部分で何かが引っかかっている可能性があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは Eオプションは外部エンコード形式(および内部エンコード形式)を指定します。 ご質問に書かれたプログラムでいうと、ARGV[0]で指定したファイルはこのエンコード形式で書かれているよと指定するオプションです。このオプションがない場合はOSや環境から判断したデフォルトのエンコード形式が指定されます。 おそらく質問者様の環境でのデフォルトの外部エンコード形式がUTF-8では無いのではないかと思います。 この場合、プログラムのif文において正規表現はUTF-8を想定しているのに変数lineが示す文字列はデフォルトエンコード形式で読み込まれているので、一致せずにエラーになります。 対応方法としては、 1.ARGV[0]で読み込むファイルのエンコード形式をデフォルトの形式にする。 デフォルトの外部エンコード形式は以下で確認できます。 p Encoding.default_external 2.Eオプションの代わりにプログラム中で外部エンコード形式をUTF-8に設定しなおします。プログラムの最初で以下を記述します。 Encoding.default_external = 'utf-8'
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
その「エンコードのエラー」の, 具体的なエラーメッセージを明らかにはできませんか?
お礼
解決できました。ご回答ありがとうございます。
補足
strip.rb:3:in `block in main': invalid byte sequence in Windows-31J (ArgumentError) from strip.rb:2:in `each_line' from strip.rb:2:in `<main>'
- tatsu99
- ベストアンサー率52% (391/751)
あなたのソースには全角空白が含まれています。 以下に全角空白の個所を□で表示します。 --------------------------------------------- file = File.open(ARGV[0]) file.each_line do |line| □next if /^\s*$/ =~ line #空白行 □next if /^#/ =~ line□□#シャープで始まる行 □puts line end file.close ---------------------------------- 上記の全角空白を半角の空白に変えてください。 sublime text2は全角の空白も半角の空白もみためは、同じように表示しますので 注意してください。
お礼
すいません、読者に読みやすくインデントの代わりに空白を使いました。 プログラムの方ではちゃんと半角にしていたんですが・・・ 空白やコンマも結構エラーの元ですよね、私もよくコンマや空白を消し 忘れてエラーを起してしまいます。
お礼
言われたとおりにすると解決できました! ご親切にどうもありがとうございます。