Hippo2000 (2000/12/10)
Unicode系モジュールの1つUnicode::Map8です。
作者はGisle Aasさんです。メールで許可を申請中ですが著作権の内容から公開しても問題ないと判断しました。
Unicode::Map8 - 8ビット文字とUnicodeの間のマッピング・テーブル
require Unicode::Map8;
my $no_map = Unicode::Map8->new("ISO646-NO") || die;
my $l1_map = Unicode::Map8->new("latin1") || die;
my $ustr = $no_map->to16("V}re norske tegn b|r {res\n");
my $lstr = $l1_map->to8($ustr);
print $lstr;
print $no_map->tou("V}re norske tegn b|r {res\n")->utf8
Unicode::Map8 クラスは8ビット文字セットとUnicodeのような16ビット文字セットの間の効率的なマッピング・テーブルを実装しています。テーブルは占有する空間の面と変換スピードの両方の面から効率的です。16ビット文字列はネットワーク・バイド・オーダを使用すると仮定しています。
以下のメソッドを利用できます:
引数を省略すると、空のマッピングテーブルが構築されます。以下で説明されるaddpair() を使ってマッピング・ペアを追加しなければなりません。
以下の例について考えてみましょう:
$m->addpair(0x20, 0x0020); $m->addpair(0x20, 0x00A0); $m->addpair(0xA0, 0x00A0);
これは8ビット文字セットでの0x20と0xA0という文字は、16ビットでそれ自身にマップされることを意味します。しかし16ビットでは0x0A0は0x20にマップされます。
to8()とrecode8()によって置き換えられます。tou() そしてrecode8()によって使われます。to16()
と同じ。しかしプレーンなUCS2文字列の代わりにUnicode::Stringオブジェクトを返します。以下のコールバック・メソッドを利用することができます。Unicode::Map8のサブクラスを作ることにより、これらのメソッドをオーバーライドすることができます。
例:
package MyMapper; @ISA=qw(Unicode::Map8);
sub unmapped_to8
{
my($self, $code) = @_;
require Unicode::CharName;
"<" . Unicode::CharName::uname($code) . ">";
}
Unicode::Map8 コンストラクタは2つの異なるファイル・フォーマットを解析することができます;バイナリ・フォーマットとテキスト・フォーマットです。
バイナリ・フォーマットは単純です。それにはネットワーク・バイト・オーダーでの16ビット integerのペアの並びから構成されます。最初のペアには特殊な値0xFFFE, 0x0001が入っていなければなりません。各ペアでは最初の値が8ビット文字の値、2番目が16ビット文字のコードです。これに従えば、最初の値は256よりも小さくなければなりません。
テキスト・フォーマットはコメント(最初の空白でない文字が'#')、完全なる空行もしくは2つの16進数を持つ行のいずれかである行により構成されます。16進数の頭にはCやPerlのように"0x"がつかなければなりません。これは <URL:ftp://ftp.unicode.org/Public>から利用できるUnicodeマッピング・ファイルと同じフォーマットです。
マッピング・テーブル・ファイルはPerl @INCパスのどこかのUnicode/Map8/maps ディレクトリにインストールされます。変数$Unicode::Map8::MAPS_DIRがこのディレクトリへの完全なパス名です。バイナリ・マッピング・ファイルはこのディレクトリに、末尾が.binで格納されます。テキスト・マッピング・ファイルは末尾が.txtで格納されます。
map8_bin2txt とmap8_txt2bin は、これらのマッピング・ファイル・フォーマットを変換します。
$MAPS_DIRにある、aliasesという特殊ファイルは、さまざまな文字セットを示すために使われる別名をすべて指定します。各行の最初の名前が実際のファイル名で、残りは空白で区切られた別名です。
'umap --list'
コマンドはサポートされている文字セットの一覧を出すために使われます。
Unicodeサロゲート・ペアを1つの文字として扱いません
umap(1), the Unicode::String manpage
(原文のまま)
Copyright 1998 Gisle Aas.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。