ASIPのRubyistなるままに このページをアンテナに追加 RSSフィード

2009-07-10

Stringと文字コード、RubyとJava

08:22 | Stringと文字コード、RubyとJavaを含むブックマーク

Ruby文字列における文字コードの扱いは1.9以前と以降

で大きく変わりました。


Ruby1.8の文字列クラスは文字列バイトコード配列として

内部に保持していますが、文字列文字コード情報は保持

していません。文字列に対して文字コードによって変化する

処理を行うメソッドを呼び出す場合、外部から文字コード

指定する必要があります。メソッドの引数で指定しなかった

場合、実行環境のデフォルト文字コード($KCODE)が使われ

ます。


Ruby1.9文字列クラスは自身の文字コード情報を保持して

います。文字列に対して文字コードによって変化する処理を

行うメソッドを呼び出す場合、内部で保持する自身の文字コード

情報を利用します。外部からの文字コード指定は必須では

なくなりました。


Rubyで外部から文字列を読み込む場合、1.9からは読込時に

おける文字コードの指定が可能になりました。読込時に

文字コードを指定しておくと、文字列に自身の文字コード

情報がセットされます。読込時に文字コードを指定しなかった

場合、1.8と同様に文字コード引数に持つメソッドでは

必ず文字コードを指定する必要があります。

(force_encodingメソッドで後から文字列文字コード

情報を強制的にセットする(書き換える)ことは可能です。)


Java文字列クラスはRuby1.8と同様に自身の文字コード

情報を持ちません。


JavaがRuby1.8と異なる点は内部文字コードUTF-8UTF-16

(Java1.4まではUCS-2)に統一(決めうち)している点です。Java

文字列クラスは文字列文字コードUTF-8UTF-16

あるものとして処理を行います。


Java文字列UTF-8UTF-16でない文字列を渡した場合には

文字化けを起こすことがあります。UTF-8UTF-16でない

文字列は受け取ったら即座にUTF-8UTF-16

変換する必要があります。

推敲中...?

mtoyoshimtoyoshi 2009/08/19 13:04 JavaってUTF-16じゃなかったでしたっけ??