アプリ版:「スタンプのみでお礼する」機能のリリースについて

同じrubyスクリプトを、MacOSとWindowsで動かしたいと思っています。
日本語が正常に表示されないのでいろいろやっていく内に、解せないことがあります。

MacOS上で

puts($KCODE)
puts("テスト")

という2行のファイルを、UTF-8、及び S_JISで保存してそれぞれ -Ku -Ks オプションをつけて実行させてみると、S_JISの方は正しく表示されません。
$KCODEの値は正しく SJIS になっていました。

Windwsで同じファイルを走らせると、S_JISの方は正しく表示されますが、UTF-8 の方が正しく表示されません。

rubyのバージョンは1.8.7、エディタは mi を使用しました。

なにか勘違いしてるのでしょうか?

A 回答 (3件)

Windowsのコマンドプロンプトは、デフォルト設定ですと、Shift JISのテキストデータを正しく表示できますが、UTF-8テキストは表示できません。



Mac OS Xのターミナルは、デフォルト設定ですと、UTF-8のテキストデータを正しく表示できますが、Shift JISテキストは表示できません。

――というところは知っているように見受けられますが、具体的になにが解せないのでしょう?

解せない内容を具体的(どういう挙動を示すことを想定しているとか。)に補足してみては。

この回答への補足

もう少し、勉強してみます。ありがとうございました。

補足日時:2011/05/21 20:26
    • good
    • 0
この回答へのお礼

>Windowsのコマンドプロンプトは、デフォルト設定ですと、Shift JISのテキストデータを正しく表示できますが、UTF-8テキストは表示できません。

>Mac OS Xのターミナルは、デフォルト設定ですと、UTF-8のテキストデータを正しく表示できますが、Shift JISテキストは表示できません。

すみません。全く知りませんでした。
単純にソースがどのコードでかかれているか、-Kオプション等で示せばうまくいくもと思ってました。

お礼日時:2011/05/21 20:17

実行はターミナル.appからでしょうか?


それだと、SJISを正しく表示させるには、ターミナルの設定を変更してShift_JISに設定する必要がありますよ。

KCODEは、スクリプトや入出力がそのコードだと宣言するだけのもので、例えば、Shift_JISで書かれたものを端末に合せてUTF-8に変換してくれる、とか言うものではないです。
    • good
    • 0
この回答へのお礼

そうです、ターミナル.app です。
ターミナル側の問題もあるのですね。

なんだか半分くらいしか分かりませんが、スクリプのコードだけが分かれば -K オプション等で指定できるもの、すべてそのままで表示されるのかと思ってました。

私の理解不足ですね。ありがとうございました。

お礼日時:2011/05/21 20:24

自分の認識だと、元々日本語WindowsはShift_JIS系統のWindows-31J(MS/CP932等とも)を想定する動作になっています。


今のMacも含むUNIX系だとEUC-JPやUTF-8が普通ですよね
最近だとメモ帳も若干対応コード増えましたが、コマンドプロンプトでのこの辺の扱いは悪化しているようにすら感じます。

Windowsのコマンドプロンプトでもchcpを使えば文字コード変更できますが、その後使いづらかったりするので個人的にはお勧めできません。
となると、パッと思いつく選択肢はこの辺です

・環境によってコード側の文字コード変換しつつ使う
・Windowsの時はコマンドプロンプトを使わず、その辺吸収してくれるIDE(SciTE / NetBeans 等)を使う
・1.8から1.9に乗り換え、内部文字コード指定しながら使う
・基本Shift-JIS運用にして、UNIX系ではCUIの文字コードを変更してから使う(環境変数LANGを「ja_JP.SJIS」等に)
・Windowsの時はcygwin上で走らせる
・kconv等で強制変換する

という感じで、自分にはあまり綺麗な解決策を挙げられません。
ちなみに、個人的に採用しているのはコード側の文字コード変換か、IDEの利用です。

この辺綺麗に解消できる手段があれば、業務上Windowsを捨てられない身として自分も把握しておきたいのですが。。。

<おまけ>
余談ですが、このへんの動きをもってRubyのWindows対応が弱いとは言えないと思います。
他の言語でも直面しそうな話ですし、むしろWindowsに非があるような・・・
    • good
    • 0
この回答へのお礼

ありがとうございます。

私、ちょっと簡単に考えすぎてたみたいです。
ご指導頂いた内容、半分くらいしか現状では理解できてませんが、調べ直してみます。

お礼日時:2011/05/21 20:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!