|
[ruby-list:43057] Re: Iconvのこと: msg#00042lang.ruby.japanese
成瀬です。 Shunsuke Takenaka wrote: > Iconvをつかって「〜」をutf-8からshift-jisへ変換しようとすると、例外が起こります。 0009-BundledLibraries に書いた通り、 「〜」U+FF5E は Shift_JIS への対応が定義されていないため、 CP932 を使いましょうという話になります。 > Iconv.new('shift-jis', 'utf-8').iconv('〜') # 「-」でなく「_」を使って Shift_JIS の方が無難です # なお、UTF-8 や EUC-JP は「-」 でなく、 > Iconv.new('cp932', 'utf-8').iconv('〜') になりますね。 > るびまの第3回も参考にしましたが、解決にはいたりませんでした... > http://jp.rubyist.net/magazine/?cmd=view&p=0009-BundledLibraries&key=cp932 っとすると、そうしても無理だったのですかね。 # ちなみに Windows-31J = CP932 と考えていいです だとすると、Iconv が用いている iconv ライブラリが、 CP932 に対応していないことが予想されます。 # Windows に Ruby をどうやってインストールしたかによります # ActiveScriptRuby の最新あたりは対応してたような なので、第一には CP932 に対応している iconv をインストールする、 が正解でしょう。 Kconv/NKF モジュールを使うのも 1.8.4 ならば現実的な選択肢です。 Iconv に比べて環境依存がほぼないのでこちらの方が楽かな。 # NKF は ソースを丸ごと Ruby に添付しているので、 # Ruby のバージョンが同じなら NKF も同じ > 考えたこと > 1.shift-jisで作ったファイル(tilde.txt)に「〜」を書き込んでおいて、そのファイルを読み込み、該当データの「〜」をreplaceする utf8_data1 = utf8_data.replace("\xef\xbd\x9e", "\xe3\x80\x9c") のように、CP932 風の UTF-8 文字列を、 Shift_JIS 風に変えてから処理するのが無難かなと思います。 「〜」以外にもひっかかりうる文字はあるので http://www.miraclelinux.com/technet/samba30/iconv_issues.html あたりを参考に・・・、とか考えると面倒になってきますね。 > 2.C++などで作った変換モジュールを通して出力する 文字コード周りは地雷が多いので、なるべく車輪の再発明は避けるべきです。 IBM ICU あたりを使うとかはアリかとは思いますけどね。 -- NARUSE, Yui <naruse-EuwAtAQalc1BDgjK7y7TUQ@xxxxxxxxxxxxxxxx> DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA
|
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | [ruby-list:43056] Re: Iconvのこと, Kentaro KAWAMOTO |
|---|---|
| Next by Date: | [ruby-list:43058] Re: Iconvのこと, Kentaro KAWAMOTO |
| Previous by Thread: | [ruby-list:43056] Re: Iconvのこと, Kentaro KAWAMOTO |
| Next by Thread: | [ruby-list:43058] Re: Iconvのこと, Kentaro KAWAMOTO |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |