Rubyリファレンス: Home

encode, encode! (String)

Edit   History

Ruby 1.9

標準クラス・モジュール > String > encode, encode!

encodeメソッドとencode!メソッドは、文字列の文字コードを変換します。encode!メソッドについては、#encode!をご覧ください。

encode

str.encode(encoding [, options])

encodeメソッドは、文字コードを変換した新しい文字列を返します。引数encodingには、変換後の文字コードを表す文字列またはEncodingオブジェクトを指定します。引数optionsについては、#引数optionsをご覧ください。

変換後の文字コードにない文字が混じっているときは、例外Encoding::UndefinedConversionErrorが発生します。変換前の文字コードとして間違ったバイト列を含んでいるときは、Encoding::InvalidByteSequenceErrorが発生します。引数optionsを指定すると、この2つの例外を防げます。

次の例では、マジックコメントがUTF-8なので、変数sはUTF-8の文字列です。encodeメソッドで"太郎"をUTF-8からShift_JISに変換します。

# encoding: utf-8
s = "太郎"
puts s.encode("Shift_JIS")
太郎   (Shift_JISでの出力)
str.encode(dst_encoding, src_encoding [, options])

第1引数dst_encodingに変換後の文字コード、第2引数src_encodingに変換前の文字コードを指定すると、文字列が持っている文字コード情報に関わりなく、src_encodingのバイト列と見なしてdst_encodingに変換します。

次の例は、Shift_JISで"花子"になるバイト列をUTF-8に変換します。

s = "\x89\xD4\x8e\x71"
puts s.encode("UTF-8", "Shift_JIS")
花子   (UTF-8での出力)
str.encode([options])

引数に文字コードを指定しないと、Encoding.default_internalを変換後の文字コードとして変換します。Encoding.default_internalの初期値はnilです。nilのままだと文字コードの変換もoptionsによる不正文字や改行文字の変換も行われません。

次の例では、Encoding.default_internalをShift_JISに設定して文字コードを変換します。

# encoding: utf-8
Encoding.default_internal = "Shift_JIS"
s = "太郎"
puts s.encode
太郎   (Shift_JISでの出力)

encode!

str.encode!(encoding [, options])
str.encode!(dst_encoding, src_encoding [, options])
str.encode!([options])

encode!メソッドは、レシーバの文字コードを変換します。レシーバ自身を変更するメソッドです。戻り値はレシーバ自身です。

引数の指定のしかたはencodeメソッドと同じです。

# encoding: utf-8
s = "太郎"
s.encode!("Shift_JIS")
puts s
太郎   (Shift_JISでの出力)

引数options

引数optionsには、変換できない文字の処理や、改行文字の変換のしかたをハッシュで指定します。encode("Shift_JIS", :invalid => :replace, :replace => "*")のように指定できます。以下はハッシュのキーと値についての解説です。

:invalid => :replace
変換前の文字コードが不正なバイト列を含んでいるときの処理方法を指定します。値を:replaceとすると、不正なバイトを代替文字に置き換えます。それ以外の場合は、例外Encoding::InvalidByteSequenceErrorが発生します。
:undef => :replace
変換後の文字コードで表せない文字が混じっているときの処理方法を指定します。値を:replaceとすると、変換できない文字を代替文字に置き換えます。それ以外の場合は、例外Encoding::UndefinedConversionErrorが発生します。
:replace => 文字列
:invalid:undefを指定したときの代替文字を指定します。:replaceを指定しないとデフォルト値の"?"になります。
:xml => :text/:attr
XML形式に変換します。変換できない文字は文字参照(&#x16進数;)に変換します。値を:textとすると、< > &&lt; &gt &amp;に置き換えます。値を:attrとすると、全体を" "で囲い、< > & "&lt; &gt &amp; &quot;に置き換えます。
:cr_newline => true
改行文字\n\rに置き換えます。
:crlf_newline => true
改行文字\n\r\nに置き換えます。
:universal_newline => true
\r\r\n\nに置き換えます。

次の例は、引数optionsのいろいろな例です。

# encoding: utf-8
s = "A\xA0C"
puts s.encode("Shift_JIS", :invalid => :replace)
s = "Trés bien"
puts s.encode("Shift_JIS", :undef => :replace, :replace => "*")
s = "\"Trés bien\""
puts s.encode("Shift_JIS", :xml => :attr)
s = "hello\r\nworld\r"
p s.encode("Shift_JIS", :universal_newline => true)
A?C
Tr*s bien
"&quot;Tr&#xE9;s bien&quot;"
"hello\nworld\n"

関連項目