• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Rubyのエンコードについて)

Rubyのエンコードについて

このQ&Aのポイント
  • sublime text 2を使用している場合、Rubyのエンコードに関するエラーが発生する可能性があります。
  • プログラムの行頭で# encoding: UTF-8と指定してもエラーが解消されない場合、プログラムの実行時に-ruby -E UTF-8と指定する必要があります。
  • エンコードのエラーが出るプログラムは、正規表現の部分で何かが引っかかっている可能性があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • siffon9
  • ベストアンサー率64% (136/211)
回答No.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'

参考URL:
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2frubycmd.html
noname#208914
質問者

お礼

言われたとおりにすると解決できました! ご親切にどうもありがとうございます。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

その「エンコードのエラー」の, 具体的なエラーメッセージを明らかにはできませんか?

noname#208914
質問者

お礼

解決できました。ご回答ありがとうございます。

noname#208914
質問者

補足

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)
回答No.1

あなたのソースには全角空白が含まれています。 以下に全角空白の個所を□で表示します。 --------------------------------------------- file = File.open(ARGV[0]) file.each_line do |line| □next if /^\s*$/ =~ line #空白行 □next if /^#/ =~ line□□#シャープで始まる行 □puts line end file.close ---------------------------------- 上記の全角空白を半角の空白に変えてください。 sublime text2は全角の空白も半角の空白もみためは、同じように表示しますので 注意してください。

noname#208914
質問者

お礼

すいません、読者に読みやすくインデントの代わりに空白を使いました。 プログラムの方ではちゃんと半角にしていたんですが・・・ 空白やコンマも結構エラーの元ですよね、私もよくコンマや空白を消し 忘れてエラーを起してしまいます。