標準出力のエンコーディングの設定について

89 views
Skip to first unread message

Takashi Katou

unread,
Oct 28, 2012, 1:21:39 PM10/28/12
to jruby-u...@googlegroups.com
はじめまして。加藤と申します。
jruby と cruby の挙動の違いについてご教示いただきたくメールします。

普段、仕事の関係もあり、jruby を Windows 上で使用しているのですが、ソースコード
がUTF-8 の場合でコマンドプロンプトに日本語メッセージを表示しようとするとうまく
行きません。(コマンドプロンプトのコードページを UTF-8 に変更すると出力が崩れて
しまいます。これは Windows 側の問題だと思います)

そこで、以下の記事を参考にして

http://d.hatena.ne.jp/wwwcfe/20101229/ruby19_encoding

標準出力の外部エンコーディングを Windows31J にしてやれば良いのでは、と考え

jruby -EWindows-31J:UTF-8 xxxx.rb

とやってみたのですが、jruby では、-E オプションをつけても標準出力の外部エンコー
ディングが設定されないままで出力が化けてしまいます。

例として、上記記事のサンプルコード

  # -*- encoding: utf-8 -*-
 
  # 外部エンコーディング
  p Encoding.default_external
  p $stdout.external_encoding
  # 内部エンコーディング
  p Encoding.default_internal
  p $stdout.internal_encoding
 
  str = "こんにちは世界"
  # 文字列のエンコーディング。ソースコードと同じになる。
  p str.encoding
  # 文字列を表示
  puts str



> jruby -EWindows-31J:UTF-8 test.rb

で実行すると

  #<Encoding:Windows-31J>
  nil
  #<Encoding:UTF-8>
  nil
  #<Encoding:UTF-8>
  <文字化け>

といった風になります。

ちなみに、最新の ruby1.9.3-p286 の Windows インストーラを使用した場合、特にオプ
ションを設定しなくても、上記のサンプルコードの出力が、Windows-31J に変換され、
コマンドプロンプト上で化けません。(上記ブログ記事から動作が改善されているようで
す)

もちろん、jruby でもスクリプトの最初に

$stdout.set_encoding("Windows-31J","UTF-8")

とかつければ問題ないのですが、起動オプション側でなんとかできないかと思案中です。

jruby は、1.7.0 です。よろしくお願いします。

Reply all
Reply to author
Forward
0 new messages