- ベストアンサー
Ruby 1.9でのencode指定の表記について
- Rubyでのデータ処理用に1.9系への移行を考えています。ソースコードの最初に書く文字コードの指定について、参照すべき表記一覧がわからないです。
- Windows環境での使用を考えているため、シフトJISコードの場合が多いですが、どの表記が正しいかわかりません。
- Ruby 1.9でのencode指定の表記について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>この"utf-8"の部分に書く文字コードの表記一覧(?)はどちらを参照すればよろしいのでしょうか? ruby -e "puts Encoding.name_list" >書き方として"SHIFT-JIS"、"Shift-JIS"、"SJIS"等のうち、どの表記が正解なのか判りません。 ruby -e "puts Encoding.default_external" かな? 実はよくわからん。SJIS だとうまく行かなかったので、Windows-31J にしてみたりしてる。
その他の回答 (2)
- Sonoda Yuki(@yugui)
- ベストアンサー率81% (9/11)
例のエンコーディングのIANAへの登録名は"Shift_JIS"です。RubyとしてはEncoding::Shift_JIS.namesのどれでも良いので、"SJIS"も受け付けます。"Shift-JIS"というエンコーディング名はないので受け付けません。なお、大文字と小文字はこの場合は区別しません。 ちなみに、Windowsで一般にShift_JISと呼ばれているエンコーディングはShift_JISではなくCP932です。ですから、"Windows-31J", "CP932", "csWindows31J"のいずれかを書くと良いのではないでしょうか。
お礼
ご回答ありがとうございました。 回答を拝見して、マニュアルをのEncordingクラスをみましたところ、定数に一覧があるのを発見しました。マニュアルが見られる場合は、こちらを参照するようにしたいと思います。 > Windowsで一般にShift_JISと呼ばれているエンコーディングはShift_JISではなく CP932です。 これも知りませんでした、教えていただきありがとうございました。
- notnot
- ベストアンサー率47% (4900/10358)
ドキュメントには無いんじゃないかなあ。yuguiさんが回答してくれるか? もともとこのコメントは、emacsやvi等のエディタに対して、「このファイルはこれこれの文字コードで書かれているよ」という指示の行(vi用はすこし書式が違います)なので、「emacsやviが受け付ける名前」ということになると思います。 どれが受け付けられてどれが受け付けられないかはやってみればわかるので良いですよね。 どれが正式か?という意味では、(メールやウェブで使われている)MIME規格でのシフトJISの名前は、質問中のどれでもなく、Shift_JIS です。 あるいは、細かいところを気にすると、Windowsの拡張されたシフトJISコードという意味で、cp932 と書くのが良いのかも。簡単に言うと cp932 = Shift_JIS + 丸数字などのWindows独自文字 です。 あと、 # -*- coding: Shift_JIS -*- というのは、emacs用なので、Windowsでエディタで書くなら # coding: Shift_JIS で十分です。
お礼
ご回答ありがとうございました。 > ドキュメントには無いんじゃないかなあ。 やはりですか。 検索もしてみたのですが、こういうコメントを入れるという記述はあちこちにあったのですが、具体的にどう書けば良いかという記述がみつからず質問した次第です。 > どれが受け付けられてどれが受け付けられないかはやってみればわかるので良いですよね。 確かに仰るとおりなのですが、少なくとも自分の場合には"Shift_JIS"というアンダースコアを使用した表記を思いつくのには、それなりの時間がかかったと思います。 私と同じようなライトユーザーで、戸惑う方は多いのではないでしょうか? > Windowsでエディタで書くなら > # coding: Shift_JIS > で十分です。 これも知りませんでした、勉強になります。
お礼
ご回答ありがとうございました。 自宅のPCに ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-mswin32] をインストールしてみて、 教えていただいたコマンドを確認いたしました。 他のコードを扱うときに、また悩むと思いますのでこのコマンドを一緒にコメントに書いておきたいと思います。