NAME

Unicode::String - Unicodeキャラクターの文字列 (UCS2/UTF16)


SYNOPSIS

 use Unicode::String qw(utf8 latin1 utf16);
 $u = utf8("The Unicode Standard is a fixed-width, uniform ");
 $u .= utf8("encoding scheme for written characters and text");

 # 様々な外部フォーマットに変換する
 print $u->ucs4;      # 4 byte characters
 print $u->utf16;     # 2 byte characters + surrogates
 print $u->utf8;      # 1-4 byte characters
 print $u->utf7;      # 7-bit clean format
 print $u->latin1;    # lossy
 print $u->hex;       # a hexadecimal string

 # all these can be used to set string value or as constructor
 $u->latin1("hello, world");
 $u = utf16("¥0h¥0e¥0l¥0l¥0o¥,¥0 ¥0w¥0o¥0r¥0¥0l¥0d");

 # 文字列操作
 $u2 = $u->copy;
 $u->append($u2);
 $u->repeat(2);
 $u->chop;

 $u->length;
 $u->index($other);
 $u->index($other, $pos);

 $u->substr($offset);
 $u->substr($offset, $length);
 $u->substr($offset, $length, $substitute);

 # オーバーローディング
 $u .= "more";
 $u = $u x 100;
 print "$u¥n";

 # 文字列 <--> 数値の配列
 @array = $u->unpack;
 $u->pack(@array);

 # その他
 $u->ord;
 $u = uchr($num);


DESCRIPTION

Unicode::StringオブジェクトはUnicodeキャラクターの並びを 表現します。Unicodeの標準は固定長の、キャラクターやテキストを 書くための統一的なエンコード手法です。 そのエンコードでは、アルファベット、表意文字、シンボル を取り扱い、これらを混ぜて使うことができます。 UnicodeはASCIIキャラクターセットに手本を求めていますが、 多言語テキストをフルに取り扱うために16ビットエンコーディングを 使用しています。

内部的にはUnicode::Stringオブジェクトはネットワークバイト順序 (ビッグエンディアン)で並んだ二バイトの文字列です。 クラスは外部フォーマットからの変換、外部フォーマットへの変換、 そして内部16ビットフォーマットで作成された文字列に対する 全ての操作を行うための様々なメソッドを提供します。

utf16(), utf8(), utf7(), ucs2(), ucs4(), latin1(), uchr() といった関数は、Unicode::Stringモジュールからimportすることが でき、対応するエンコーディングの文字列を初期化するための コンストラクターとしても動作します。ucs2()とutf16()は 実際には同じ関数の別名です。

Unicode::Stringオブジェクトは様々な演算子をオーバーロード しているので、通常の8ビットキャラクターの文字列と同じように 扱うことができます。ここには代入、連接、繰り返しと同様に 文字列、数値、真理値への変換も含まれます。


METHODS

The following methods are available: 以下のメソッドが使用可能です:

Unicode::String->stringify_as( [$enc] )

このクラスメソッドは、 通常の文字列とUnicode::Stringとの間で暗黙的な変換が 行われるときに使用されるエンコーディングを指定するものです。 その指定は、Unicode::Stringのコンストラクター new() に対する 引数のエンコーディングを定義します。エンコーディング引数が 与えられなかった場合、stringify_as()はカレントのエンコーディング のコンストラクター関数を返します。エンコーディング引数 ($enc)は 以下に挙げるような文字列を値として取ります。 ``ucs4'', ``ucs2'', ``utf16'', ``utf8'', ``utf7'', ``latin1'', ``hex''。 デフォルトは“utf8”です。

$us = Unicode::String->new( [$initial_value] )

これは通常用いられるオブジェクトコンストラクターです。 引数が与えられなかった場合、このメソッドは空のUnicode::String オブジェクトを返します。$initial_value引数が与えられた場合には、 stringify_as()エンコーディングの指定に従ってデコードが行われ、 新しく生成したオブジェクトの初期値として使用します。

通常は、以下に挙げるようなエンコーディングメソッドの幾つかを あなたの名前空間にimportし、適切にエンコードされた引数を与えて呼び出す ことによってUnicode::Stringオブジェクトを生成します。

$us->ucs4( [$newval] )

UCS-4エンコーディングはキャラクター一つ当り32ビットを使用します。 このエンコーディングを使うメリットは、サロゲートペア(surrogate pair) を取り扱う必要がないということです。4バイトのPerl文字列は キャラクター毎にネットワークバイト順序で並んでいます。

ucs4()メソッドは常に$usの古い値を返し、引数が与えられた場合には UCS-4文字列のデコードを行い、それを$usの新しい値として セットします。 $newvalにあるキャラクターは0x0から0x10ffffの範囲になければなりません。 この範囲外のキャラクターは無視されます。

$us->ucs2( [$newval] )
$us->utf16( [$newval] )

ucs2()とutf16()は同じメソッドで、名前だけが異なるものです。 UCS-2エンコーディングはキャラクター一つ当り16ビット使用します。 UTF-16エンコーディングはUCS-2と同じでありますが、 サロゲートペアを含んでいることが異なります。 サロゲートは連続した二つの16ビットキャラクターを使って 0x010000 .. 0x10FFFF の範囲のキャラクターをエンコードすることを 可能にします。エンコードでは各キャラクター(もしくはサロゲートコード)の バイトはネットワークバイト順序で並べられます。

ucs2()メソッドは常に$usの古い値を返します。 引数が与えられた場合には$usに新しい値をセットします。

$us->utf8( [$newval] )

UTF-8エンコーディングでは、 0x0から0x7Fまでの範囲にあるキャラクターのエンコーディングに 8ビット使い、0x80から0x7FFの範囲のものには16ビット使い、 0x800から0xFFFFの範囲のものには24ビット使い、 0x01000から0x10FFFFのものには32ビット使います。 アメリカ人はこのエンコーディングを好みます。なぜなら、 プレーンなUS-ASCIIはこのエンコーディングでもそのままだからです。 このエンコーディングのもう一つのメリットは、 '¥0'が0x0のエンコーディングでしか現れないので 通常のNULで終端された文字列(Cで使われているやり方です) がそのまま使えるということです。

utf8()メソッドは常に$usの古い値をUTF-8を使ったエンコードで 返します。引数が与えられた場合にはそれをUTF-8文字列としてデコードして 結果の値が$usにセットされます。

$us->utf7( [$newval] )

UTF-7エンコーディングは、プレーンなUS-ASCIIキャラクターだけを用いる エンコーディングです。これは8bit目を落としてしまうような 転送に対しても安全なものにします。 US-ASCIIの範囲にないキャラクターはbase64エンコードされ、 エスケープキャラクタも'+'が使われます。 UTF-7エンコーディングはRFC1642で説明されています。

utf7()メソッドは常に$usの古い値をUTF-7を使ったエンコードで 返します。引数が与えられた場合にはそれをUTF-7文字列としてデコードして 結果の値が$usにセットされます。

グローバル変数 $Unicode::String::UTF7_OPTIONAL_DIRECT_CHARSが 真である場合には、キャラクターエンコードの対象となる範囲が広がります。 デフォルトでは真にセットされています。影響を受けるキャラクター は以下の通りです。

   ! " # $ % & * ; < = > @ [ ] ^ _ ` { | }
$us->latin1( [$newval] )

Unicodeの先頭の256個は、Latin-1としても知られている ISO-8859-1 8ビットエンコーディングと同一です。 latin1()メソッドは常に$usの古い値を返します。 引数が与えられた場合には$usの新しい値としてその値をセットします。 Latin-1の文字列が返されるとき、0x0から0xFFの範囲にないキャラクターは 無視されます。UnicodeからLatin-1のマッピングをもっと自分で 制御したいというのであれば、Unicode::Map8クラスを使用してください。 このクラスは他の8ビットキャラクタークラスを扱うときも同様です。

$us->hex( [$newval] )

このメソッドはUnicodeキャラクターを それぞれ、``U+XXXX''のような プレーンなASCII文字列 で表した文字列を返します。各キャラクターは一つの空白で区切られます。 このフォーマットは$usの値をセットするときにも使うことができます (この場合``U+''は省略可能です)。

$us->as_string;

Unicode::Stringをstringify_as()の設定にしたがって プレーンな文字列に変換します。 デフォルトのstringify_as()メソッドは``utf8''です。

$us->as_num;

Unicode::Stringを数値に変換します。現時点では、0x30から0x39まで のみが数字として認識されます。案としては、全てのUnicodeの数字 キャラクターをサポートする予定です。

$us->as_bool;

Unicode::Stringを真理値に変換します。空文字列のみがFALSEと なります。Perlが``0''をFALSEとみなすにも関わらず、 U+0030というキャラクターのみの文字列はTRUEと判定されます。

$us->repeat( $count );

$usの内容を$count回繰り返した新しいUnicode::Stringを 返します。この操作は以下のもののオーバーロードです。

  $us x $count
$us->concat( $other_string );

文字列$usと文字列$other_stringを連結します。 $other_stringがUnicode::Stringオブジェクトでない場合には、 まず最初にUnicode::string->newコンストラクターに渡されます。 この操作は以下の操作のオーバーロードです。

  $us . $other_string
$us->append( $other_string );

文字列$other_stringを$usに追加します。 $other_stringがUnicode::Stringオブジェクトでなかった場合には、 追加に先立ってUnicode::String->newコンストラクターに$other_string が渡されます。これは以下のような操作のオーバーロードです。

  $us .= $other_string
$us->copy;

Unicode::Stringのカレントオブジェクトのコピーを返します。 この操作は代入演算子のオーバーロードです。

$us->length;

Unicode::Stringの長さを返します。サロゲートペアの長さは2として 数えられます。

$us->unpack;

それぞれがUTF-8キャラクターコードを表している整数値のリストを 返します。

$us->pack( @uchr );

$usの値として、引数で渡された UTF-16キャラクターの並びを セットします。

$us->ord;

$usの最初のキャラクターのキャラクターコードを返します。 ord()メソッドはサロゲートペアにも対応していて、 0x0から0x10FFFFの範囲で結果を返します。 $usが空文字列であった場合にはundefが返されます。

$us->chr( $code );

$usに$codeで指示されたキャラクターから構成される文字列をセットします。 引数$codeは0x0から0x10FFFFの間の整数でなければなりません。 コードが0xFFFFよりも大きい場合にはサロゲートペアが生成されます。

$us->name

スカラーコンテキストでは$usの最初のキャラクターの 公式Unicode名を返します。 配列コンテキストでは$usの全てのキャラクターの 名前を返します。Unicodeも参照してください。

$us->substr( $offset, [$length, [$subst]] )

$usの部分文字列を返します。組み込みのsubstr関数と同様ですが、 サブルーチンにLVALUE(代入可能な値)を返させることができないために、 部分文字列に代入したい値は第三引数として渡してやらなければ なりません。

$us->index( $other, [$pos] );

$us中での$otherの位置です。$posを起点として検索することも 可能です。

$us->chop;

$usの最後のキャラクターを切り取って、それを (Unicode::Stringオブジェクトとして)返します。


SEE ALSO

Unicode, Unicode, http://www.unicode.org/


COPYRIGHT

Copyright 1997-1998 Gisle Aas.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.