- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- Perl/日本語処理/文字コード操作 - Encode へ行く。
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フラグを付けた方が楽。