From: "大田黒俊夫" Date: 2009-08-01T14:55:18+09:00 Subject: [ruby-list:46249] Re: 全角ダッシュ記号のエンコーディング? 木村さん おお,やはり Windows-31J と Shift_JIS の違いですか.ご教示ありがとうございます. ではこれから Windows 上では出来るだけ Windows-31J というエンコーディングを 明示したほうが良いわけですね. エディタやブラウザなどで,Windows-31J と文字コードを明記したものが少ないのが 気になります.私はこれまでずーっと Shift_JIS という設定で日本語の文章を書いてきた のですが,これは MS-DOS 時代から WIndows 時代への移り変わりのときに, 文字コードの違いを厳密に区別してこなかった人たちが(私をを含めて)いるという ことなのでしょうね. ちなみに,Windows-31J と CP932 とは同じものですか?CP932 は Windows 3.1 時代に,config.sys だか autoexec.bat だかで指定する必要があったように思います. 2009/08/01 14:15 に KIMURA Koichi さんは書きました: > 木村です。 > > 大田黒俊夫 さんは書きました: >> 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 -- 俊(とし) * 望湖庵日記 http://griffin.cocolog-nifty.com/lakesidedairy/