Encode.pmを使った文字コード変換

日本語処理の流れ

例えば、EUCの文字列を受け取り、加工し、SJISへの変換する場合、

 [EUC文字列]→ [UTF8フラグ付きUTF8文字列]→[加工されたUTF8フラグ付きUTF8文字列]→[SJIS文字列]

のような流れになる。

基本

  • 日本語処理(マルチバイト対応substr()など)は、UTF8フラグ付きUTF8文字列に対して行う。
  • (標準出力やファイルに)出力する文字列はUTF8フラグ付きであってはならない。UTF8フラグを落とす必要がある。
  • 「UTF8フラグのないUTF8文字列」と「UTF8フラグ付きUTF8文字列」は別のもの。

日本語処理をするためのプラグマ、モジュール

use encoding 'ENCODE'
特定の文字コード(含むUTF8)で書かれたPerlスクリプトで日本語処理をする。
use utf8
UTF8で書かれたPerlスクリプトで日本語処理をする。
Encode::decode('FROM_ENCODE',$no_utf8_flag_text)
UTF8フラグなしの文字列を、その文字の文字コードを指定して、UTF8フラグを付ける。
Encode::encode('TO_ENCODE',$utf8_flag_text)
UTF8フラグ付きの文字列を指定した文字コードに変換する(UTF8フラグを落す)
Encdoe::from_to($no_utf8_flag_text,'FROM_ENCODE','TO_ENCODE')
UTF8フラグのない文字列の文字コードの変換する。
use openもしくは3つの引数を取るopen()
日本語で書かれたファイルを読み書きする。

使いどころ

Perlスクリプト内で日本語を直に書いて($text='あああ')処理を行う場合
use encodingもしくはuse utf8
日本語処理が必要な個所があった場合
Encodeモジュール
日本語ファイルを読み書きする時
use openもしくは3つの引数を取るopen()

注意点

機能的にはEncodeモジュールがあれば、use encodingやuse utf8は不要。ただし、Perlスクリプト内で日本語を直に書く量が多い場合、use encodingやutf8してスクリプト内全体にUTF8フラグを付けた方が楽。

関連


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS