From: KIMURA Koichi Date: 2009-08-01T14:15:40+09:00 Subject: [ruby-list:46248] Re: 全角ダッシュ記号のエンコーディング? 木村です。 大田黒俊夫 さんは書きました: > Ruby 1.9 系列のエンコーディングについて質問します. > > 以下のようなスクリプトで全角ダッシュ"−"をエンコードしようとすると, > エラーではねられます. > > ちなみに環境は Windows-XP SP3, Ruby 1.9.1 p243 (i386-mswin32)です. > > # -*- coding: Shift_JIS -*- > # > p "ー".encode("Windows-31J") #=> "ー" > p "ソ".encode("Windows-31J") #=> "ソ" > p "−".encode("Windows-31J") #=>Encoding::UndefinedConversionError > > エラーメッセージの中に > "\xE2\x88\x92" from UTF-8 to Windows-31J in conversion from Shift_JIS > to Windows-31J > というメッセージが含まれています. > > Shift_JIS の 5c というコードが悪さをしているのでしょうか? > そもそも,Shift_JIS と Windows-31J がどう違うのか,よくわかっていません. 今回のこの件については、0x5cは関係ありません。 ShiftJISとWindows-31Jというのは、ほぼ同一のものなのですが一部に違いがあ ります。 そのため、両者を混用すると今回のようなことが発生します。 上記の例の全角ダッシュは、ShiftJISとWindows-31Jでは値が違います。 「ShiftJISで表現した全角ダッシュをWindows-31Jの振りして」変換させ ようとしたので、エラーになったわけです。 #大分はしょりましたが、ほかの人が補足してくれるんじゃないかな Ruby Freaks Lounge:第4回 Ruby M17N 事始め:文字コード編|gihyo.jp … 技 術評論社 http://gihyo.jp/dev/serial/01/ruby/0004 Windows-31JとShiftJISがどうちがうのかは上の記事辺りをとっかかりに 調べてみてください。 > > ちなみに,上記スクリプトの magic comment で Windows-31J を指定するとこのエラーは起きません. > > ご教示いただければ幸いです. > マジックコメントを Windows-31J にしたことによって、ShiftJISとの 混用がなくなったのでエラーも起きなくなったというわけです。 -- 木村浩一/KIMURA Koichi I thought what I'd do was, I'd pretend I was one of those deaf-mutes or shoud I? mail kbk at kt.rim.or.jp web www.kt.rim.or.jp/~kbk/zakkicho/index.html