
エディタはsublime text 2を使っているのですが
楽しいRuby第四版のサンプルプログラムで学習を始めた当初、エンコードのエラーがでました。
プログラムの行頭に# encoding: UTF-8 とマジックコメントを打ってもエラーはなおらず、プログラムを呼び出す際に、>ruby -E UTF-8 と指定すると問題なく走りました。
で、その後も、日本語を使用したプログラムを実行する際にエンコードをプログラムの行頭で指定していないファイルでも、呼び出す際に「-E UTF-8」としなくても、問題なく走るようになったんですが。
楽しいRuby第四版のサンプルプログラムでlist6.15にstrip.rbというものがあり、内容は
file = File.open(ARGV[0])
file.each_line do |line|
next if /^\s*$/ =~ line #空白行
next if /^#/ =~ line #シャープで始まる行
puts line
end
file.close
というものがあり、これはコマンドラインから指定したファイルから空白行とシャープで始まる行を抜き取って出力するプログラムなんですが、これを実行する際にまたエンコードのエラーが出てしまいます。
プログラムの行頭で# encoding: UTF-8 と指定してもエラーになり、呼び出す際に>ruby -E UTF-8 strip.rb 呼び出すプログラム名 で問題なく走ったのですが、これは毎回呼び出すたびに-E -UTF-8を指定しないと走ってくれません。
日本語は使っていないプログラムなんで正規表現の部分で何かがひっかかっていると思うんですが、何が原因なんでしょうか。
エディタの問題なんでしょうか(ネットで調べるとsublime text 2はUTF-8しか対応していないと書いてありました。
また、パソコンはプログラム学習用として米国製のAcerというノートパソコンを使っています。
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=2fru …
No.2
- 回答日時:
その「エンコードのエラー」の, 具体的なエラーメッセージを明らかにはできませんか?
この回答への補足
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>'

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は全角の空白も半角の空白もみためは、同じように表示しますので
注意してください。
すいません、読者に読みやすくインデントの代わりに空白を使いました。
プログラムの方ではちゃんと半角にしていたんですが・・・
空白やコンマも結構エラーの元ですよね、私もよくコンマや空白を消し
忘れてエラーを起してしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Windows 8 win8 "ベータ ワールドワイド言語サポートで Unicode UTF-8 を使用"を出したい 2 2023/05/23 19:57
- その他(プログラミング・Web制作) ラズパイ上の、pythonのエラーについて 1 2023/04/12 23:27
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- PHP PHPプログラムの間違い 1 2022/10/06 14:33
- PHP Content-Typeが機能していない? 2 2022/07/17 11:10
- Windows 10 数年前からWindows10 の Update ができないです。なぜですか? 7 2022/11/09 06:03
- Ruby MacBookAir起動時にRubyソースコードをコマンドラインで実行するには? MacのOS起動時 1 2022/04/18 01:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAにてメール作成した際、一部...
-
あるプログラムのコマンドライ...
-
XnViewにwebpを「いつも開く」...
-
.netプログラミングで全画面表...
-
ニュースサイトの更新の仕組み
-
「Outlookが他のプログラムによ...
-
ウイルスセキュリティ メッセー...
-
じゃんけん 勝ち負けアイコ回...
-
セルフイメージを高める21日...
-
ポケコンについて
-
ドロップダウンリストの文字を...
-
読み込み中にアクセス違反が発...
-
画像を読み込むのと取り込むの...
-
閉じるを押してもデバッグが終...
-
複数のexeファイルの同時セット...
-
リンク元を集計したいのですが。
-
所詮、人間もプログラムされた...
-
"応答無し"になるまでの時間に...
-
WORD印刷できるがEXCE...
-
Rubyのエンコードについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あるプログラムのコマンドライ...
-
VBAにてメール作成した際、一部...
-
Excelで4096点以上のFFTの方法
-
ドロップダウンリストの文字を...
-
PICマイコンのコピー(クローン...
-
Vba UserFormを前面に出す方法...
-
XnViewにwebpを「いつも開く」...
-
読み込み中にアクセス違反が発...
-
未使用の変数を一括検索する方法
-
VBAでユーザーフォームが自動的...
-
画像を読み込むのと取り込むの...
-
「Outlookが他のプログラムによ...
-
WORD印刷できるがEXCE...
-
Excelに埋め込んだVBAのプログ...
-
UWSCで指定のフォルダを開きたい。
-
テキストボックスのエンターキ...
-
自動クエリとはどういうもので...
-
javaで特定の文字のカウントを...
-
AutoCADを用いて板金展開図を自...
-
powered byの表記について
おすすめ情報