どうも、Rubyをやっているものです。突然ですが、Rubyのエンコーディングクラスってよく分からなくないですか?そこで今回はエンコーディングクラスの概要について簡単にまとめておきたいと思います。
Rubyのエンコーディングクラスの特徴、使い方
Rubyのエンコーディングと文字列
そもそもエンコーディングとは何かを説明します。それは、そのデータの文字コードのことです。
例えばRubyでは個々の文字が「文字データそのもの」と「そのデータの文字コード」の情報をセットで保持しています。そのデータの文字コードとは文字の変換形式を示しているものであって、utf-8やshift_jisなどがあります。
文字列を作るには、リテラルに記述する方法と、プログラムの外部から文字列を受け取る方法があります。
スクリプトエンコーディングとマジックコメント
マジックコメントをスクリプトの先頭に書くことでRubyスクリプト自体のエンコーディングを指定できます。ちなみにマジックコメントは1行目に記述しないといけないルールになっています。
encoding: utf-8
正規表現とエンコーディング
正規表現もエンコーディング情報を持っています。この情報はマジックコメントによって書かれたスクリプトエンコーディングに対応しています。
例えばEUC_JPの正規表現オブジェクトにUTF-8の文字列をマッチさせようとしても、エラーになってしまいます。
IOクラスとエンコーディング
IOオブジェクトを使って入出力を行う際もエンコーディングが重要になってきます。IOオブジェクトはそれぞれ外部エンコーディングと内部エンコーディングというエンコーディング情報を持っています。
外部エンコーディング
入出力の対象ファイルで、期待するエンコーディングの形式の情報
内部エンコーディング
Rubyスクリプトの中で扱うエンコーディングの形式の情報
エンコーディングの動き
書き込みに影響するのは外部エンコーディングの情報のみです。つまり内部エンコーディング情報がなんであっても大丈夫。
読み込みの場合は、外部エンコーディングと内部エンコーディングのどちらの情報も影響するので注意が必要です。