Unicode::String - Unicodeキャラクターの文字列 (UCS2/UTF16)
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);
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ビットキャラクターの文字列と同じように 扱うことができます。ここには代入、連接、繰り返しと同様に 文字列、数値、真理値への変換も含まれます。
The following methods are available: 以下のメソッドが使用可能です:
このクラスメソッドは、 通常の文字列とUnicode::Stringとの間で暗黙的な変換が 行われるときに使用されるエンコーディングを指定するものです。
その指定は、Unicode::Stringのコンストラクター new() に対する 引数のエンコーディングを定義します。エンコーディング引数が
与えられなかった場合、stringify_as()はカレントのエンコーディング のコンストラクター関数を返します。エンコーディング引数 ($enc)は
以下に挙げるような文字列を値として取ります。 ``ucs4'', ``ucs2'', ``utf16'', ``utf8'', ``utf7'',
``latin1'', ``hex''。 デフォルトは“utf8”です。
これは通常用いられるオブジェクトコンストラクターです。
引数が与えられなかった場合、このメソッドは空のUnicode::String
オブジェクトを返します。$initial_value引数が与えられた場合には、
stringify_as()エンコーディングの指定に従ってデコードが行われ、
新しく生成したオブジェクトの初期値として使用します。
通常は、以下に挙げるようなエンコーディングメソッドの幾つかを あなたの名前空間にimportし、適切にエンコードされた引数を与えて呼び出す ことによってUnicode::Stringオブジェクトを生成します。
UCS-4エンコーディングはキャラクター一つ当り32ビットを使用します。 このエンコーディングを使うメリットは、サロゲートペア(surrogate pair) を取り扱う必要がないということです。4バイトのPerl文字列は キャラクター毎にネットワークバイト順序で並んでいます。
ucs4()メソッドは常に$usの古い値を返し、引数が与えられた場合には
UCS-4文字列のデコードを行い、それを$usの新しい値として セットします。
$newvalにあるキャラクターは0x0から0x10ffffの範囲になければなりません。
この範囲外のキャラクターは無視されます。
ucs2()とutf16()は同じメソッドで、名前だけが異なるものです。
UCS-2エンコーディングはキャラクター一つ当り16ビット使用します。 UTF-16エンコーディングはUCS-2と同じでありますが、
サロゲートペアを含んでいることが異なります。 サロゲートは連続した二つの16ビットキャラクターを使って 0x010000 .. 0x10FFFF
の範囲のキャラクターをエンコードすることを 可能にします。エンコードでは各キャラクター(もしくはサロゲートコード)の
バイトはネットワークバイト順序で並べられます。
ucs2()メソッドは常に$usの古い値を返します。
引数が与えられた場合には$usに新しい値をセットします。
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にセットされます。
UTF-7エンコーディングは、プレーンなUS-ASCIIキャラクターだけを用いる エンコーディングです。これは8bit目を落としてしまうような 転送に対しても安全なものにします。 US-ASCIIの範囲にないキャラクターはbase64エンコードされ、 エスケープキャラクタも'+'が使われます。 UTF-7エンコーディングはRFC1642で説明されています。
utf7()メソッドは常に$usの古い値をUTF-7を使ったエンコードで
返します。引数が与えられた場合にはそれをUTF-7文字列としてデコードして
結果の値が$usにセットされます。
グローバル変数 $Unicode::String::UTF7_OPTIONAL_DIRECT_CHARSが 真である場合には、キャラクターエンコードの対象となる範囲が広がります。 デフォルトでは真にセットされています。影響を受けるキャラクター は以下の通りです。
! " # $ % & * ; < = > @ [ ] ^ _ ` { | }
Unicodeの先頭の256個は、Latin-1としても知られている ISO-8859-1 8ビットエンコーディングと同一です。
latin1()メソッドは常に$usの古い値を返します。
引数が与えられた場合には$usの新しい値としてその値をセットします。
Latin-1の文字列が返されるとき、0x0から0xFFの範囲にないキャラクターは
無視されます。UnicodeからLatin-1のマッピングをもっと自分で
制御したいというのであれば、Unicode::Map8クラスを使用してください。
このクラスは他の8ビットキャラクタークラスを扱うときも同様です。
このメソッドはUnicodeキャラクターを それぞれ、``U+XXXX''のような プレーンなASCII文字列 で表した文字列を返します。各キャラクターは一つの空白で区切られます。 このフォーマットは$usの値をセットするときにも使うことができます (この場合``U+''は省略可能です)。
Unicode::Stringをstringify_as()の設定にしたがって プレーンな文字列に変換します。 デフォルトのstringify_as()メソッドは``utf8''です。
Unicode::Stringを数値に変換します。現時点では、0x30から0x39まで のみが数字として認識されます。案としては、全てのUnicodeの数字 キャラクターをサポートする予定です。
Unicode::Stringを真理値に変換します。空文字列のみがFALSEと なります。Perlが``0''をFALSEとみなすにも関わらず、 U+0030というキャラクターのみの文字列はTRUEと判定されます。
$usの内容を$count回繰り返した新しいUnicode::Stringを 返します。この操作は以下のもののオーバーロードです。
$us x $count
文字列$usと文字列$other_stringを連結します。 $other_stringがUnicode::Stringオブジェクトでない場合には、 まず最初にUnicode::string->newコンストラクターに渡されます。 この操作は以下の操作のオーバーロードです。
$us . $other_string
文字列$other_stringを$usに追加します。 $other_stringがUnicode::Stringオブジェクトでなかった場合には、 追加に先立ってUnicode::String->newコンストラクターに$other_string が渡されます。これは以下のような操作のオーバーロードです。
$us .= $other_string
Unicode::Stringのカレントオブジェクトのコピーを返します。 この操作は代入演算子のオーバーロードです。
Unicode::Stringの長さを返します。サロゲートペアの長さは2として 数えられます。
それぞれがUTF-8キャラクターコードを表している整数値のリストを 返します。
$usの値として、引数で渡された UTF-16キャラクターの並びを セットします。
$usの最初のキャラクターのキャラクターコードを返します。 ord()メソッドはサロゲートペアにも対応していて、
0x0から0x10FFFFの範囲で結果を返します。
$usが空文字列であった場合にはundefが返されます。
$usに$codeで指示されたキャラクターから構成される文字列をセットします。 引数$codeは0x0から0x10FFFFの間の整数でなければなりません。 コードが0xFFFFよりも大きい場合にはサロゲートペアが生成されます。
スカラーコンテキストでは$usの最初のキャラクターの 公式Unicode名を返します。 配列コンテキストでは$usの全てのキャラクターの 名前を返します。Unicodeも参照してください。
$usの部分文字列を返します。組み込みのsubstr関数と同様ですが、 サブルーチンにLVALUE(代入可能な値)を返させることができないために、 部分文字列に代入したい値は第三引数として渡してやらなければ なりません。
$us中での$otherの位置です。$posを起点として検索することも 可能です。
$usの最後のキャラクターを切り取って、それを (Unicode::Stringオブジェクトとして)返します。
Unicode, Unicode, http://www.unicode.org/
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.