A Strolling Programmeraka なかだ

またの名を「風まかせ人まかせ力まかせ」日記

T D I A R Y T I M E S % fgrep -i '' *.td2
<< 2005/11/ 1 1. require hacks not affecting -r command-line option
2. lambda
2 3 1. 佐賀初日終って…
4 1. 佐賀三日目
5 6 1. 佐賀終了
7 1. libiconv 1.10
2. iconvctl()
8 1. win32のiconv
9 1. msvcrtの不一致
10 11 12 1. 帰宅
13 14 15 16 17 1. 多重代入の返戻値
2. A-B,C-D,E-F ... Y-Z の生成
18 1. オーバーライド禁止
2. Perl, Python, Ruby の比較
19 20 1. フリーズ
21 22 23 1. 茂木
2. 茂木初日AM
3. 茂木初日PM
24 1. 茂木二日目AM
2. 茂木二日目PM
25 1. 茂木三日目AM
2. 茂木三日目PM
26 1. 茂木四日目AM
2. 茂木四日目PM
27 1. 茂木五日目AM
28 29 30 >>
«前の日記(2005-11-07) 最新 次の日記(2005-11-09)» 編集

2005-11-08 modified at Tue Nov 8 23:50:54 2005

* [ruby] win32のiconv

バグじゃなくて、単にランタイムDLLの不一致のようだ。

Libiconv DLL 1.10-20051016 for Windowsは VC++7.1でコンパイルされているらしく、msvcr71.dllにリンクされている。 つまり、iconv()でセットされるのはmsvcr71.errnoなのに、 ruby側のiconv.somsvcrt.errnoを見ている。

だから、VC++7.1でコンパイルしたrubyでは逆に1.9.1でBrokenLibraryになるが、 1.10では正常に動く。

$ ruby19-mswin32_71.exe -riconv -e 'p Iconv::LIBICONV_VERSION.to_s(16);p Iconv.iconv("ISO8859-1", "UTF-8", "\342\200\234")'
"109"
-e:1:in `iconv': "\342\200\234" (Iconv::BrokenLibrary)
        from -e:1

$ ruby19-mswin32_71.exe -C iconv-1.10-20051016-dll -riconv -e 'p Iconv::LIBICONV_VERSION.to_s(16);p Iconv.iconv("ISO8859-1", "UTF-8", "\342\200\234")'
"10a"
-e:1:in `iconv': "\342\200\234" (Iconv::IllegalSequence)
        from -e:1

どうしたもんかな。 「混ぜるな危険」とでも書いとくしかないか?

本日のツッコミ(全1件) [ツッコミを入れる]
_ nabeken (2005-11-08 23:50)

調査ありがとうございます

お名前:
E-mail:
コメント:

投稿する前にチェックボックスをチェックしてください

本日のPingbacks(全0件)
本日のリンク元
アンテナ
その他のリンク元
検索

Key fingerprint = 1E69 3ED2 C05B 6BA4 34B2 FC25 478B C08D 2772 58F6