たのしいRuby(第2版) 「はじめてのRuby」〜日本語の表示〜


■これは「たのしいRuby 第2版」を元にしています。
Amazon CAPTCHA

Windowsコマンドプロンプトで日本語を表示してみよう!

今度は、日本語を表示してましょう。・・・・といっても、難しい事は何もありません。単にアルファベットの代わりに日本語を「""」の中に書くだけです。

ふむでは。

  • プログラム
print "スタンド使い同士ってのは知らず知らずのうちにいつか・・・どこかで出会うんだよ\n"
print "やったァーーッ メルヘンだッ! ファンタジーだッ! こんな体験できるやつは 他にいねーっ\n"

えー。上記のような、ジョジョの名言を出力してみましょう。
文字コードShift_JIS で書きました。

  • 実行結果
C:\enjoy_ruby>ruby helloruby.rb
スタンド使い同士ってのは知らず知らずのうちにいつか・・・どこかで出会うんだよ
やったァーーッ メルヘンだッ! ファンタジーだッ! こんな体験できるやつは 他にいねーっ

おお。見事に表示されました。


pメソッドと日本語表示

pメソッドは、プログラマがオブジェクトの中身を確認するためのメソッドです。実行結果として画面に文字列を表示したいときは、putsメソッドやprintメソッドを使ってください。

ふむ。とりあえず、pメソッドで日本語を表示してみましょう。

  • プログラム
p "スタンド使い同士ってのは知らず知らずのうちにいつか・・・どこかで出会うんだよ\n"
p "やったァーーッ メルヘンだッ! ファンタジーだッ! こんな体験できるやつは 他にいねーっ\n"
  • 実行結果
C:\enjoy_ruby>ruby helloruby.rb
"\203X\203^\203\223\203h\216g\202\242\223\257\216m\202\301\202\304\202\314\202\315\222m\202\347\202\270\222m\202\347\202\270\202\314\202\244\202\277\2
02\311\202\242\202\302\202\251\245\245\245\202\307\202\261\202\251\202\305\217o\211\357\202\244\202\361\202\276\202\346\n"
"\202\342\202\301\202\275\203@\201[\201[\203b\201@\203\201\203\213\203w\203\223\202\276\203b\201I\201@\203t\203@\203\223\203^\203W\201[\202\276\203b\2
01I\201@\202\261\202\361\202\310\221\314\214\261\202\305\202\253\202\351\202\342\202\302\202\315\201@\221\274\202\311\202\242\202\313\201[\202\301\n"

詳しく表示されましたね。


プログラミング言語 Ruby リファレンスマニュアル

p(obj, [obj2, ...])
obj を人間に読みやすい形で出力します。以下のコードと同じです。 (Object#inspect参照)
print obj.inspect, "\n", obj2.inspect, "\n", ...

ふむふむ。以下と同じと言う事ですね。

  • プログラム
print "スタンド使い同士ってのは知らず知らずのうちにいつか・・・どこかで出会うんだよ\n".inspect
print "やったァーーッ メルヘンだッ! ファンタジーだッ! こんな体験できるやつは 他にいねーっ\n".inspect
  • 実行結果
C:\enjoy_ruby>ruby helloruby.rb
"\203X\203^\203\223\203h\216g\202\242\223\257\216m\202\301\202\304\202\314\202\315\222m\202\347\202\270\222m\202\347\202\270\202\314\202\244\202\277\2
02\311\202\242\202\302\202\251\245\245\245\202\307\202\261\202\251\202\305\217o\211\357\202\244\202\361\202\276\202\346\n""\202\342\202\301\202\275\20
3@\201[\201[\203b\201@\203\201\203\213\203w\203\223\202\276\203b\201I\201@\203t\203@\203\223\203^\203W\201[\202\276\203b\201I\201@\202\261\202\361\202
\310\221\314\214\261\202\305\202\253\202\351\202\342\202\302\202\315\201@\221\274\202\311\202\242\202\313\201[\202\301\n"
  • inspect

プログラミング言語 Ruby リファレンスマニュアル

オブジェクトを人間が読める形式に変換した文字列を返します。
組み込み関数 p は、このメソッドの結果を使用して オブジェクトを表示します。

pメソッドで日本語表示

また、pでも日本語を表示できるようです。

  • プログラム
$KCODE = "sjis"
p "スタンド使い同士ってのは知らず知らずのうちにいつか・・・どこかで出会うんだよ\n"
p "やったァーーッ メルヘンだッ! ファンタジーだッ! こんな体験できるやつは 他にいねーっ\n"
  • 実行結果
C:\enjoy_ruby>ruby helloruby.rb
"スタンド使い同士ってのは知らず知らずのうちにいつか\245\245\245どこかで出会うんだよ\n"
"やったァーーッ メルヘンだッ! ファンタジーだッ! こんな体験できるやつは 他にいねーっ\n"

「・・・」の部分が微妙に化けらっておりますが・・・他はちゃんと表示されましたね。
改行コードはそのまま表示されているにもかかわらず、ちゃんと改行されているところがまたちょっと謎ですが・・・。


pメソッドは改行が自動でつくのでしょうか?

  • プログラム
p ""
p ""
  • 実行結果
C:\enjoy_ruby>ruby helloruby.rb
"\202\240"
"\202\242"

むむ。改行されるみたいですね。納得。


コマンドプロンプトUTF-8を表示

今度は、文字コードutf-8 で書いてみましょう。

  • プログラム
print "スタンド使い同士ってのは知らず知らずのうちにいつか・・・どこかで出会うんだよ\n"
print "やったァーーッ メルヘンだッ! ファンタジーだッ! こんな体験できるやつは 他にいねーっ\n"

文字コードutf-8です。

  • 実行結果
C:\enjoy_ruby>ruby helloruby_utf-8.rb
繧ケ繧ソ繝ウ繝我スソ縺・酔螢ォ縺」縺ヲ縺ョ縺ッ遏・繧峨★遏・繧峨★縺ョ縺・■縺ォ縺・▽縺具ス・・・・・縺ゥ縺薙°縺ァ蜃コ莨壹≧繧薙□繧・
繧・▲縺溘ぃ繝シ繝シ繝・€€繝。繝ォ繝倥Φ縺繝・シ√€€繝輔ぃ繝ウ繧ソ繧ク繝シ縺繝・シ√€€縺薙s縺ェ菴馴ィ薙〒縺阪k繧・▽縺ッ縲€莉悶↓縺・・

えー。みごとに化けらったですね。

rubyには文字コードを指定するオプションがあります。
次のように、Windowsの場合は -Ks オプション(Shift_JIS)を、UnixMacOS Xの場合は -Kuオプション(UTF-8)を指定します。うまくいかない場合は、-Keオプション(EUC-JP)も試してください。

Windows
> ruby -Ks スクリプトファイル名
Unix, MacOS Xの場合
> ruby -Ku スクリプトファイル名

ふむふむ。では、-Ku オプションを指定したら、UTF-8文字コードを表示できるのでしょうか。やってみましょう。

  • 実行結果
C:\enjoy_ruby>ruby -Ku helloruby_utf-8.rb
繧ケ繧ソ繝ウ繝我スソ縺・酔螢ォ縺」縺ヲ縺ョ縺ッ遏・繧峨★遏・繧峨★縺ョ縺・■縺ォ縺・▽縺具ス・・・・・縺ゥ縺薙°縺ァ蜃コ莨壹≧繧薙□繧・
繧・▲縺溘ぃ繝シ繝シ繝・€€繝。繝ォ繝倥Φ縺繝・シ√€€繝輔ぃ繝ウ繧ソ繧ク繝シ縺繝・シ√€€縺薙s縺ェ菴馴ィ薙〒縺阪k繧・▽縺ッ縲€莉悶↓縺・・

うーん。だめですね。これは、Rubyがダメなのではなく、WindowsコマンドプロンプトUTF-8を表示する能力がないのでしょうか?


いえ、そんなことはないようです。

http://materia.jp/blog/20070309.html
エンジニアの魂 - typeコマンドで文字列変換 - 葉っぱ日記
http://www.tom.sfc.keio.ac.jp/~sakai/2ch/1149263630.html

コマンドプロンプト

chcp 65001

と打つと、UTF-8の文字列も表示できるようになります。

C:\enjoy_ruby>chcp 65001
Active code page: 65001

C:\enjoy_ruby>type helloruby_utf-8.rb
print "スタンド使い同士ってのは知らず知らずのうちにいつか・・・どこかで出会うんだよ\n"
print "やったァーーッ メルヘンだッ! ファンタジーだッ! こんな体験できるやつは 他にいねーっ\n"

typeコマンドでファイルの中身を見たところ、utf-8文字コードでも表示されました。


コマンドプロンプトUTF-8Rubyプログラム

では、rubyプログラムでやってみましょう。

C:\enjoy_ruby>chcp 65001
Active code page: 65001

C:\enjoy_ruby>ruby helloruby_utf-8.rb
helloruby_utf-8.rb:1:in `write': Permission denied (Errno::EACCES)
       from helloruby_utf-8.rb:1:in `print'
       from helloruby_utf-8.rb:1

こんなんでました。


http://bitmap.dyndns.org/blog/archives/001526.html

あと、表示はできるが入力ができない。コピー&ペーストしても認識されなかった。

上記の、「表示は出来るが入力ができない。」というところが、ヒントっぽいです。エラーメッセージも、
helloruby_utf-8.rb:1:in `write': Permission denied (Errno::EACCES)
ですし。書き込めないようです。

rubyコマンドプロンプトに書き込んでいるかんじなんでしょうかね?



●ヒントになりそうなページ

http://www.daifukuya.com/kagemai/ml/users/msg00499.html
[ruby-dev:30377] Re: Ruby 1.8.6 preview1 has been released
utf8なテキストをコマンドプロンプトで表示する – もぎゃんらんど




ということで、コマンドプロンプトで日本語を含んだrubyを実行するときは、
Shift_JISがよいようです。


環境

C:\enjoy_ruby>ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]