NAME

Unicode::Japanese - 日本語文字コード変換


SYNOPSIS

use Unicode::Japanese;

# convert utf8 -> sjis

print Unicode::Japanese->new($str)->sjis;

# convert sjis -> utf8

print Unicode::Japanese->new($str, 'sjis')->get;

# convert sjis(imode絵文字) -> utf8

print Unicode::Japanese->new($str, 'sjis-imode')->get;

# convert 全角(utf8) -> 半角(utf8)

print Unicode::Japanese->new($str)->z2h->get;


DESCRIPTION

Unicode::Japanese は,日本語の文字コードの相互変換を行うモジュールです. 以下のような特徴があります.


METHODS

$s = Unicode::Japanese->new($str [, $icode [, $encode]])
新しい Unicode::Japanese インスタンスを指定します. パラメータを指定すると,set メソッドに渡されます.

$s->set($str [, $icode [, $encode]])
$str : 文字列 $icode : 文字コード指定.省略可.省略時は 'utf8' $encode : 文字エンコード.省略可.

インスタンスに文字列をセットします. 文字コード指定を省略すると UTF-8 と見なされます.

文字コードを指定する場合は,'jis', 'sjis', 'euc', 'utf8', 'ucs2', 'ucs4', 'utf16', 'utf16-ge', 'utf16-le', 'utf32', 'utf32-ge', 'utf32-le', 'ascii','binary', 'sjis-imode', 'sjis-doti', 'sjis-jsky', のいずれかを指定します.

文字コードを自動判別する場合は,'auto' を指定します.

文字エンコードには,'base64' のみ指定可能です. base64 を指定した場合は,base64 デコードされてから String クラスの文字列となります.

バイナリをデコードする場合は,文字エンコードタイプとして 'binary' を指定します.

'auto' 時の文字コード自動判別は,getcode メソッドにより 行われます.

sjis-imode,sjis-doti,の場合,文字列中の &#xxxx; は 絵文字に変換されます.

$str = $s->get
$str : 文字列(UTF-8)

文字列を UTF-8 コードで取り出します.

$code = $s->getcode($str)
$str : 文字列 $code : 文字コードを表す文字列

文字列の文字コードを自動判別します. インスタンスに保持されている文字列のコードを判別するのではないことに注意してください.

文字コード自動判別時は,以下のアルゴリズムにより判定が行われます.

  1. UTF-32 の BOM があれば,utf32 と判定します.

  2. UTF-16 の BOM があれば,utf16 と判定します.

  3. UTF-32BE として正しい形式なら,utf32-be と判定します.

  4. UTF-32LE として正しい形式なら,utf32-le と判定します.

  5. 非ASCII文字が含まれていなければ,ascii と判定します. (非ASCII文字には,エスケープシーケンス以外のコントロールコードは含まれません.)

  6. JISエスケープシーケンスが含まれていれば,jis と判定します.

  7. J-PHONE の絵文字が含まれていれば,sjis-jsky と判別します.

  8. EUC コードとして正しい形式なら,euc と判定します.

  9. SJIS コードとして正しい形式なら,sjis と判定します.

  10. SJIS と i-mode の絵文字として正しい形式なら,sjis-imode と判別します.

  11. SJIS と dot-i の絵文字として正しい形式なら,sjis-doti と判別します.

  12. UTF-8 として正しい形式なら,utf8 と判定します.

  13. いずれにも当てはまらない場合,unknown と判定します.

以上のアルゴリズムのため,以下の点に注意してください.

$str = $s->conv($ocode, $encode)
$ocode : 出力コード 'jis', 'sjis', 'euc', 'utf8', 'ucs2', 'ucs4', 'utf16', 'binary', の中から指定. $encode : 文字エンコード.省略可. $str : 文字列(UTF-8)

文字列を指定した文字コードに変換してから取り出します.

文字エンコードには,'base64' のみ指定可能です. base64 を指定した場合は,base64 エンコードされた 文字列が返されます.

$s->tag2bin
文字列中に含まれる &#xxxxx; 形式の文字列を,それが表す文字自体に置き換えます.

$s->z2h
全角を半角に変換します.

$s->h2z
半角を全角に変換します.

$s->hira2kata
ひらがなをカタカナに変換します.

$s->kata2hira
カタカナをひらがなに変換します.

$str = $s->jis
$str : 文字列(JIS)

文字列を JIS(ISO-2022-JP) コードで取り出します.

$str = $s->euc
$str : 文字列(EUC)

文字列を EUC コードで取り出します.

$str = $s->utf8
$str : 文字列(UTF-8)

文字列を UTF-8 コードで取り出します.

$str = $s->ucs2
$str : 文字列(UCS2)

文字列を UCS2 コードで取り出します.

$str = $s->ucs4
$str : 文字列(UCS4)

文字列を UCS4 コードで取り出します.

$str = $s->utf16
$str : 文字列(UTF-16)

文字列を UTF-16 コードで取り出します. BOMは付きません. ビックエンディアン形式で返されます.

$str = $s->sjis
$str : 文字列(SJIS)

文字列を SJIS(MS-CP932) コードで取り出します.

$str = $s->sjis_imode
$str : 文字列(SJIS/imode絵文字)

文字列を i-mode端末向けの SJIS コードで取り出します.

$str = $s->sjis_doti
$str : 文字列(SJIS/dot-i絵文字)

文字列を dot-i端末向けの SJIS コードで取り出します.

$str = $s->sjis_jsky
$str : 文字列(SJIS/j-sky絵文字)

文字列を j-sky端末向けの SJIS コードで取り出します.

\@str = $s->strcut($len)
$len : カット文字数

\@STR : 文字列

指定文字数以下の文字列の配列に分割します.

$len = $s->strlen
$len : 文字列の表示幅

UTF-8 文字に対して length() を使うと全角文字は長さ 3 になってしまいますが, このメソッドを使用すると,従来のSJISのように,全角文字は長さ 2 を返します.

$s->join_csv(\@values);
@values : データ配列

配列をCSV文字列に変換し,インスタンスに格納します. 文字列の最後には改行(\n)が追加されます.

\@values = $s->split_csv;
@values : データ配列

インスタンスに格納されている文字列をCSVと見なし,配列に分割します. 文字列の最後にある改行は取り除かれてから分割されます.


UNICODE MAPPING

Unicode とのマッピングは以下のように行われます.

SJIS
MS-CP932 として Unicode へマッピングを行います. マッピングテーブルは以下のURLのものを使用しています.

ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT

Unicode から SJIS へマッピングする場合に,表現できない文字があると,その文字は &#xxxx; 形式に変換します. ただし,携帯絵文字は「?」に変換されます.

また,携帯向けの SJIS へ変換するときは,全ての表現できない文字は「?」に変換されます.

EUC/JIS
一度SJISコードに変換してから,Unicode へマッピングします. このとき,SJIS で表現できない文字が含まれていた場合,その文字は正しくマッピングできません.

DoCoMo i-mode
F800 - F9FF の領域のうち絵文字が存在する部分を,U+0FF800 - U+0FF9FF の領域にマッピングします.

ASTEL dot-i
F000 - F4FF の領域のうち絵文字が存在する部分を,U+0FF000 - U+0FF4FF の領域にマッピングします.

J-PHONE J-SKY
J-SKY の絵文字は,エスケープシーケンス ``\e\$'' の後に,絵文字1バイト目,1つ以上の絵文字2バイト目,``\x0f'',と続きます. 1バイト目が同じ絵文字が続く場合は,2バイト目のみを連続して書くことで圧縮することができます.

この1バイト目と2バイト目のペアを1文字と見なして,4500 - 47FF の領域を,U+0FFB00 - U+0FFDFF の領域にマッピングします.

Unicode::Japanese では,Unicode から J-SKY 絵文字にマッピングするとき,バイト目が同じ絵文字が連続している場合は,圧縮処理を自動的に行います.


BUGS


AUTHOR

SANO Taku (SAWATARI Mikage) <mikage@cpan.org>


COPYRIGHT

Copyright 2001, SANO Taku

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