たのしい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"
詳しく表示されましたね。
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
オブジェクトを人間が読める形式に変換した文字列を返します。
組み込み関数 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を表示
- プログラム
print "スタンド使い同士ってのは知らず知らずのうちにいつか・・・どこかで出会うんだよ\n" print "やったァーーッ メルヘンだッ! ファンタジーだッ! こんな体験できるやつは 他にいねーっ\n"
- 実行結果
C:\enjoy_ruby>ruby helloruby_utf-8.rb 繧ケ繧ソ繝ウ繝我スソ縺・酔螢ォ縺」縺ヲ縺ョ縺ッ遏・繧峨★遏・繧峨★縺ョ縺・■縺ォ縺・▽縺具ス・・・・・縺ゥ縺薙°縺ァ蜃コ莨壹≧繧薙□繧・ 繧・▲縺溘ぃ繝シ繝シ繝・€€繝。繝ォ繝倥Φ縺繝・シ√€€繝輔ぃ繝ウ繧ソ繧ク繝シ縺繝・シ√€€縺薙s縺ェ菴馴ィ薙〒縺阪k繧・▽縺ッ縲€莉悶↓縺・・
えー。みごとに化けらったですね。
rubyには文字コードを指定するオプションがあります。
次のように、Windowsの場合は -Ks オプション(Shift_JIS)を、UnixとMacOS 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"
コマンドプロンプトとUTF-8とRubyプログラム
では、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なテキストをコマンドプロンプトで表示する – もぎゃんらんど
環境
C:\enjoy_ruby>ruby -v ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32]