文字コード操作の前提知識

文字列には2種類の状態がある

  • 内部文字列(UTF8フラグ付き)
  • バイト列(UTF8フラグなし)

注意するのは

UTF8フラグと文字コードは無関係な事。例えば「UTF8フラグ付きなSJISの文字列」「UTFフラグなしなUTF8の文字列」というのはあり得る。「バイト列」「内部文字列」という用語を使った方が分かりやすい。

内部文字列とバイト列の違い

内部文字列

$str = 'あいうえお';    # $str が内部文字列の状態であると仮定すると、
say length($str);       # length()は$strを5文字と解釈する。

バイト列

$bytes = 'あいうえお';  # $bytes がバイト列の状態であると仮定すると、
say length($bytes);     # length()は$strを10文字と解釈する。

内部文字列とバイト列の使い分け

  • 通常、Perlスクリプト内では、文字列は内部文字列の状態で扱う。
  • しかし、文字列をファイルや標準出力に書き込む場合は、バイト列の状態でなければならない。
  • また、文字列をファイルや標準入力から読み込む場合、バイト列の状態でやってくる。
  • この為、必要に合わせて、内部文字列とバイト列の状態を変換する。

内部文字列とバイト列の状態を変換する方法

バイト列から内部文字列へ

my $str = Encode::decode('utf8', $bytes);

内部文字列からバイト列へ

my $bytes = Encode::encode('utf8', $str);

内部文字列・バイト列の変換をする際に文字コードの変換も一緒に出来る

例えば、

my $str = decode('sjis',$bytes);

でUTF8フラグなしなSJISの文字コードの文字列をUTF8フラグ付きなUTF8の文字列する。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2011-01-07 (金) 05:57:30 (2894d)