Ruby 1.8.7 リファレンスマニュアル > ライブラリ一覧 > iconvライブラリ
Iconv は UNIX 95 の iconv() 関数のラッパーで、 さまざまな文字コード体系間で文字列の変換を行ないます。
詳細は http://www.opengroup.org/ のオンラインドキュメントを 参照して下さい。
このライブラリは obsolete です。2.0 以降では利用することが出来ません。
どの文字コード体系が利用できるかはプラットフォーム依存です。さらに文字コード体系をあらわす文字列もプラットフォーム依存です。日本語 EUC をあらわす文字列が EUC-JP, euc-jp, eucJP など異なる場合があります。このプラットフォームによる違いを吸収するために、 「ext/iconv/charset_alias.rb」 が用意されています。 GNU ソフトウェア texinfo (http://www.gnu.org/software/texinfo/) に含まれるファイル config.charset を以下のミラーサイトから手に入れて
ext/iconv/ に置き、ext/iconv/ で次のように実行すると
ruby extconf.rb make
iconv.rb が生成されます。この iconv.rb がプラットフォームによる文字コード体系をあらわす文字列の違いを吸収します。
config.charset のライセンスは LGPL なので、生成された iconv.rb にも LGPL が適用されます。
require 'iconv' euc = ["a4a2a4a4a4a6a4a8a4aa"].pack("H*") # あいうえお sjis = ["82a082a282a482a682a8"].pack("H*") iconv = Iconv.new('SHIFT_JIS', 'EUC-JP') # EUC-JP から SHIFT_JIS へ変換 str = iconv.iconv(euc) str << iconv.iconv(nil) p( str == sjis )
(1) 新しく Iconv のインスタンスを作り, Iconv#iconv メソッドを使う
cd = Iconv.new(to, from) begin input.each {|s| output << cd.iconv(s)} output << cd.iconv(nil) # don't forget this ensure cd.close end
(2) Iconv.open をブロックつきで呼び出す
Iconv.open(to, from) do |cd| input.each {|s| output << cd.iconv(s)} output << cd.iconv(nil) end
(3) (2) の短縮系
Iconv.iconv(to, from, *input.to_a)
GNU libiconv で iconv ライブラリがビルドしてある場合、 Iconv#iconv、Iconv.open、Iconv.iconv の第一引数 to に は「文字コード//フラグ」という書式で GNU の独自拡張を利用する事もできま す。フラグには以下のいずれかを指定できます。
文字列の変換時に、表現できない文字を同じ見た目の文字に"翻訳"します。
文字列の変換時に、 Iconv::IllegalSequence が発生するような文字列 が途中にあった場合でも無視して変換を継続します。
ただし、上記の拡張は移植性を損ないます。 そのため、使用は避けてください。
Iconv | iconv 関数のラッパークラスです。 |
Iconv::Failure | Iconv が起こす例外のためのモジュールです。 |
Iconv::BrokenLibrary | iconv ライブラリのバグなどにより、errno(3) が設定されなかった場合に発生します。 (Windows で iconv.dll の使用する MSVC runtime DLL のバージョンが、ruby 本体が使用するものと一致していない場合も含みます。) |
Iconv::OutOfRange | Iconv ライブラリの内部エラーです。この例外は起こらないはずです。 |
Iconv::IllegalSequence | 入力か出力の文字が指示された文字集合に含まれないために変換が停止したこと を表します。 |
Iconv::InvalidCharacter | 入力の最後が不完全な文字かシフトで終っているために変換が停止したこと を表します。 |
Iconv::InvalidEncoding | メソッドの引数等で指定された文字コード体系が見つからない (システム上で有効でない) 場合に発生します。 |