Ruby 1.9.3 リファレンスマニュアル > ライブラリ一覧 > iconvライブラリ

library iconv

要約

Iconv は UNIX 95 の iconv() 関数のラッパーで、 さまざまな文字コード体系間で文字列の変換を行ないます。

詳細は http://www.opengroup.org/ のオンラインドキュメントを 参照して下さい。

このライブラリは obsolete です。2.0 以降では利用することが出来ません。 代わりに String#encode を利用してください。

注意

どの文字コード体系が利用できるかはプラットフォーム依存です。さらに文字コード体系をあらわす文字列もプラットフォーム依存です。日本語 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#iconvIconv.openIconv.iconv の第一引数 to に は「文字コード//フラグ」という書式で GNU の独自拡張を利用する事もできま す。フラグには以下のいずれかを指定できます。

//TRANSLIT

文字列の変換時に、表現できない文字を同じ見た目の文字に"翻訳"します。 Iconv#transliterate= に真を渡して指定する事もできます。

//IGNORE

文字列の変換時に、 Iconv::IllegalSequence が発生するような文字列 が途中にあった場合でも無視して変換を継続します。 Iconv#discard_ilseq= に真を渡して指定する事もできます。

ただし、上記の拡張は移植性を損ないます。 そのような機能が必要な場合は String#encode を使用してください。

参考

クラス

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

メソッドの引数等で指定された文字コード体系が見つからない (システム上で有効でない) 場合に発生します。