読者です 読者をやめる 読者になる 読者になる

Bonkura - Kenny

SIerで働く文系SEの記録

【たのしいRuby_19】Encodingクラス

Ruby

たのしいRubyの第19章を学んだ。

たのしいRuby 第4版

たのしいRuby 第4版

プログラムがどのように文字コードを扱うか、言語によって異なる。Rubyは、、、

という2つの情報を持っている。文字コードに関する情報を エンコーディング と呼ぶ。

文字列オブジェクトを作るには、大きく分けて二通りの方法が存在する。

  • スクリプトリテラルとして記述する方法
  • プログラムの外部(ファイル・コンソール・ネットワークなど)から情報を受け取る方法

Rubyエンコーディングで使う情報

リテラルに記述した文字列オブジェクトのエンコーディングを決定する情報。 スクリプトそのものの文字コードと一致 する。

外部から受け取ったデータをプログラム内でどのように扱うか?という情報

プログラムを外部に出力する際のエンコーディングに関する情報。

スクリプトエンコーディング

スクリプト自体のエンコーディングのこと。スクリプトエンコーディングEUC-JPなら、文字列のエンコーディングEUC-JPになる。スクリプトエンコーディングを指定するために使われるのが、 マジックコメント である。

# encodign: utf-8

hoge

Encodingクラス

文字列のエンコーディングを調べるには、String#encodingメソッドを使う。

p "こんにちは".encoding #=> #<Encoding:UTF-8>

str = "こんにちは".encode("EUC-JP")
p str.encoding #=> <Encoding :EUC-JP>
str2 = "こんにちは"

# 文字コードが違うため、false
p str == str2

その他メソッド

# 2つの文字列の互換性をチェックする。
p Encoding.compatible?("AB".encode("EUC-JP"),"".encode("UTF-8")) #=> #<Encoding:UTF-8>
p Encoding.compatible?("".encode("EUC-JP"),"".encode("UTF-8")) #=> nil

# デフォルトの外部・内部エンコーディングを返す
p Encoding.default_external
p Encoding.default_internal

# Rubyがサポートしているエンコーディングの一覧を返す
p Encoding.list

IOクラスとエンコーディング

外部エンコーディング・内部エンコーディングを明示的に設定しない場合は、デフォルト値となる。デフォルト値の確認はdefault_external,default_internalメソッドで確認できる。

IOオブジェクトのエンコーディング(ファイルをどのように扱うか?)という設定。

File.open(file,"mode:encoding:encoding")
# 第一引数に外部エンコーディング、第二引数に内部エンコーディング
# 例 File.open("hoge.txt", "r:Shift_JIS:UTF-8")

出力時エンコーディングの動き

入力時エンコーディングの動き