DF

UTF-8 文字列を取り扱う

Author : trashtoy

Table of Contents

Utf8Codec の概要

UTF-8 でエンコードされた文字列を取り扱うための Codec として Utf8Codec というクラスがあります. このクラスの encode(), decode() は以下のように振る舞います.

  • decode: UTF-8 の文字列を文字単位で分解し, Unicode 符号点の配列を生成する
  • encode: Unicode 符号点の配列から UTF-8 文字列を生成する

このクラスは以下のような用途で使用されることを想定しています.

  • Unicode 符号点と UTF-8 文字列の相互変換
  • 正規表現だと煩雑になりそうな, マルチバイト文字を含む文字列のバリデーション
  • 不正なバイト列が含まれた UTF-8 文字列の正規化 (任意の文字列をデコードした後に再度エンコードすることで可能)

使い方およびサンプル

以下に Utf8Codec の encode() および decode() のサンプルコードを掲載します. まずは decode() を使って文字列を Unicode 符号点の配列に変換します.

  1. $codec  new Peach_DF_Utf8Codec();
  2. $result $codec->decode("Test テスト");
  3. var_dump($result);
  4.  
  5. /*
  6. output:
  7. array(8) {
  8.   [0]=>
  9.   int(84)
  10.   [1]=>
  11.   int(101)
  12.   [2]=>
  13.   int(115)
  14.   [3]=>
  15.   int(116)
  16.   [4]=>
  17.   int(32)
  18.   [5]=>
  19.   int(12486)
  20.   [6]=>
  21.   int(12473)
  22.   [7]=>
  23.   int(12488)
  24. }
  25.  */

次に encode() を使って Unicode 符号点の配列から文字列を生成します. 以下のサンプルコードではひらがなをリストアップします.

  1. $codec  new Peach_DF_Utf8Codec();
  2. $source range(0x30410x3096)// "ぁ" から "ゖ" までの Unicode 符号点
  3. $result $codec->encode($source);
  4. var_dump($result);
  5.  
  6. /*
  7. output:
  8. string(258) "ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんゔゕゖ"
  9.  */

encode() の引数には, 配列だけでなく整数を指定することも可能です. 整数の場合は, 引数の Unicode 符号点を持つ 1 文字分の UTF-8 文字列を生成します.

  1. $codec  new Peach_DF_Utf8Codec();
  2. $result $codec->encode(0x3042);
  3. var_dump($result);
  4.  
  5. /*
  6. output:
  7. string(3) "あ"
  8.  */