« [Ruby] Win32OLEとEncoding.default_internal | トップページ | [Ruby] Win32OLEとCP51932 »

2008年10月 8日 (水)

[Ruby] Win32OLEとEUCと51932と20932


Win32OLEでEUCをサポートするにはどうすればいいのだろう?
Encoding.default_internal が EUCのとき
WIN32OLE.codepage は 20932を設定しているのだけど、本当は51932にすべきなのか?



でもって、51932のときは、Codepageの正当性をチェックしないで、
ConvertINetMultiByteToUnicode と ConvertINetUnicodeToMultiByte を使って変換すべき?



あと、Rubyの Encoding#name から Windows の Codepage への変換するときに使えそうなWindows の APIってあるんだろうか?
つまり、"Windows-31J" という文字列が与えられたときに "932" を取得できるような API。


|

« [Ruby] Win32OLEとEncoding.default_internal | トップページ | [Ruby] Win32OLEとCP51932 »

コメント

「Rubyの Encoding#name から Windows の Codepage への変換するときに使えそうなWindows の API」ですが、都合のいいものはないんじゃないかと思います。
WindowsじゃなくてRubyに聞くという手が一応あって、Encoding.aliases.find{|k,v|v.upcase== name.upcase && /^CP/ =~ k}[0] で取れますが、これをC/C++で書くのめんどいですね。Encodingのインスタンスメソッドで別名の配列を取れると話が早いんですが。

投稿: なかむら(う) | 2008年10月 9日 (木) 09時24分

うーむ。やっぱり都合のいいAPIは無いんですねえ。
と言ってうささんのおっしゃる通り、Rubyの方からは面倒そうだしなあ...。

投稿: suke | 2008年10月 9日 (木) 22時56分

先のコメントを書いた後、あまりに面倒だということでrubyレベルにはEncoding#namesというメソッドが導入されました。というわけで、エンコーディングがencだとしたら、enc.names.find{|e|/^CP/ =~ e.name} で済むようになりました。
これならCレベルでEncoding#namesをfuncallして、戻り値を舐めるだけでいけるんじゃないかと。

投稿: なかむら(う) | 2008年10月14日 (火) 09時25分

情報ありがとうございます。
時間が取れたら試してみます。

投稿: suke | 2008年10月14日 (火) 22時02分

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [Ruby] Win32OLEとEUCと51932と20932:

« [Ruby] Win32OLEとEncoding.default_internal | トップページ | [Ruby] Win32OLEとCP51932 »