|
|
| |
Unicode::Japanese::JA(3) |
User Contributed Perl Documentation |
Unicode::Japanese::JA(3) |
Unicode::Japanese::JA -
日本語文字コード変換
use Unicode::Japanese;
use Unicode::Japanese qw(unijp);
# convert utf8 -> sjis
print Unicode::Japanese->new($str)->sjis;
print unijp($str)->sjis; # same as above.
# convert sjis -> utf8
print Unicode::Japanese->new($str,'sjis')->get;
# convert sjis (imode_EMOJI) -> utf8
print Unicode::Japanese->new($str,'sjis-imode')->get;
# convert zenkaku (utf8) -> hankaku (utf8)
print Unicode::Japanese->new($str)->z2h->get;
Unicode::Japanese
は,日本語の文字コードの相互変換を行うモジュールです.
- Unicode::Japanese
のインスタンスは,UTF-8
で文字列を保持します.
- XS
使用/不使用を共にサポートしています.
XS
版はパフォーマンスが必要な場合に,
No-XS
版は手軽に使用したい場合に使用して下さい
(Japanese.pm
をコピーするだけで動作します).
- 全角半角変換,カタカナひらがな変換をサポートしています.
- 携帯電話 (DoCoMo i-mode,KDDI AU, Softbank
Mobile, ASTEL dot-i) の絵文字を Unicode
私用領域にマッピングすることで,DB
等で安全に扱うことができます.
- 異なる携帯電話同士で,同じイメージの絵文字は相互変換することが可能です.
- SJIS は, MS-CP932 とみなして
Unicode
とマッピングを行います.
- Unicode -> SJIS(及びEUC-JP/JIS)
のマッピング時,SJIS
で表現できない文字は
&#dddd;
形式に変換します.
ただしUnicode私用領域におかれている絵文字は
'?'になります. また,
携帯電話向けの変換時には,
すべての対応しない文字は'?'になります.
- Perl-5.8.0 以降において, utf8
フラグの設定処理を行います.
utf-8 `バイト'列
の取得には utf8()
メソッドを, utf-8 `文字'列
の取得には getu()
メソッドを使います.
get()
メソッドは現時点では
utf-8 `バイト'列
を返します
(将来的に変更される可能性もあります).
sjis(), jis(), utf8(), etc..
メソッドではバイト列を返します.
new, set, getcode
メソッドの入力には,
utf8-flaged/bytes を問いません.
- perl 5.10.x, 5.8.x, etc. (5.004 以降).
- (なくてもOK) C
コンパイラ.
このモジュールは XS
と Pure Perl
両方に対応しています.
C
コンパイラがないときには,
Unicode::Japanese は Pure Perl
モジュールとしてインストールされます.
- (なくてもOK)
テスト用に Test.pm 及び
Test::More.
実行時に必須なモジュールはありません.
- $s = Unicode::Japanese->new($str [, $icode [, $encode]])
- 新しい Unicode::Japanese
インスタンスを指定します.
パラメータを指定すると,"set"
メソッドに渡されます.
- $s = unijp($str [, $icode [, $encode]])
- Unicode::Janaese->new(...) と同義.
- $s->set($str [, $icode [, $encode]])
- $str: 文字列
- $icode:
文字コード指定.省略可.省略時は
'utf8'
- $encode:
バイナリ符号化方式.省略可.
インスタンスに文字列をセットします.
文字コード指定を省略すると
UTF-8 と見なされます.
利用可能な文字コード:
auto
utf8 ucs2 ucs4
utf16-be utf16-le utf16
utf32-be utf32-le utf32
sjis cp932 euc euc-jp jis
sjis-imode sjis-imode1 sjis-imode2
utf8-imode utf8-imode1 utf8-imode2
sjis-doti sjis-doti1
sjis-jsky sjis-jsky1 sjis-jsky2
jis-jsky jis-jsky1 jis-jsky2
utf8-jsky utf8-jsky1 utf8-jsky2
sjis-au sjis-au1 sjis-au2
jis-au jis-au1 jis-au2
sjis-icon-au sjis-icon-au1 sjis-icon-au2
euc-icon-au euc-icon-au1 euc-icon-au2
jis-icon-au jis-icon-au1 jis-icon-au2
utf8-icon-au utf8-icon-au1 utf8-icon-au2
ascii binary
( も参照.)
文字コードを自動判別する場合は,'auto'
を指定しなくてはいけません.
'auto'
時の文字コード自動判別は,getcode()
メソッドにより
行われます.
バイナリ符号化方式には,'base64'
のみ指定可能です.
base64
を指定した場合は,base64
デコードされてから
Unicode::Japanese
クラスの文字列となります.
渡された文字列を変更せずそのまま格納して欲しい場合には,文字コードとして
'binary' を指定します.
sjis-imode,sjis-doti,の場合,文字列中の
&#dddd; は
絵文字に変換されます.
文字コードは領域が重なっている場合があるため,
自動判別は確実ではありません.
sjis, utf8
の両方に解釈できる文字列の場合は,sjis,
sjis-au,sjis-doti
の両方に解釈できる文字列の場合は,sjis-au,
を返します.
- $str = $s->get
文字列を UTF-8
コードで取り出します.
現在は `バイト' 列
を返しますが,
将来的に変更される可能性もあります.
バイト列が必要なら
utf8() メソッドを,
文字列が必要なら
getu()
メソッドを使うことをオススメします.
- $str = $s->getu
文字列を UTF-8
コードで取り出します.
Perl-5.8.0
以降においては, utf-8
フラグのついた utf-8
文字列として
返します.
- $code = $s->getcode($str)
- $str: 文字列
- $code:
文字コードを表す文字列
渡された文字列($str)の文字コードを自動判別します.
この関数では,
例外的に,
インスタンスに保持されている
文字列のコードを判別するのではないことに注意してください.
文字コード自動判別時は,以下のアルゴリズムにより判定が行われます.
(PurePerl時)
- 1.
- UTF-32 の BOM があれば,utf32
と判定します.
- 2.
- UTF-16 の BOM があれば,utf16
と判定します.
- 3.
- UTF-32BE
として正しい形式なら,utf32-be
と判定します.
- 4.
- UTF-32LE
として正しい形式なら,utf32-le
と判定します.
- 5.
- ESC 文字 または 8
ビット目の立っている文字が含まれていなければ,ascii
と判定しま す。ESC
を除いた ASCII 制御文字
(0x00-0x1F 及び 0x7F) は ascii
の範囲内と見做しま
す。
- 6.
- JISエスケープシーケンスが含まれていれば,jis
と判定します.
- 7.
- J-PHONE
の絵文字が含まれていれば,sjis-jsky
と判別します.
- 8.
- EUC-JP
コードとして正しい形式なら,euc
と判定します.
- 9.
- SJIS
コードとして正しい形式なら,sjis
と判定します.
- 10.
- SJIS コードと au
の絵文字として正しい形式なら,sjis-au
と判定します.
- 11.
- SJIS と i-mode
の絵文字として正しい形式なら,sjis-imode
と判別します.
- 12.
- SJIS と dot-i
の絵文字として正しい形式なら,sjis-doti
と判別します.
- 13.
- UTF-8
として正しい形式なら,utf8
と判定します.
- 14.
- いずれにも当てはまらない場合,unknown
と判定します.
(XS時)
- 1.
- UTF-32 の BOM があれば,utf32
と判定します.
- 2.
- UTF-16 の BOM があれば,utf16
と判定します.
- 3.
- 以下のコードについて,
正しい文字コードであることを状態遷移を用いて調べます.
ascii / euc / sjis / jis / utf8 / utf32-be / utf32-le /
sjis-jsky / sjis-imode / sjis-au / sjis-doti
- 4.
- 最後まで正しかったものの中から,
以下の優先順で1つをえらんで,
それと判定します.
utf32-be / utf32-le / ascii / jis / euc / sjis / sjis-jsky /
sjis-imode / sjis-au / sjis-doti / utf8
- 5.
- いずれにも当てはまらない場合,unknown
と判定します.
以上のアルゴリズムのため,以下の点に注意してください.
- UTF-8
文字列でも,SJISコードと見なされる可能性があります.
- UCS2
の自動判別はできません.
- UTF-16 は BOM
がある場合のみ自動認識します.
- 携帯絵文字は,バイナリで直接絵文字がある場合のみ認識できます.
&#dddd;
形式で記述されている場合は,携帯絵文字の自動判別は行われません.
XSとPurePerlでは,
判別のアルゴリズムに違いがあるため,
異なる結果になる可能性があります.
特に,
エスケープ文字を含んでいるsjisの場合,
PurePerlではsjisと認識しますが
XSでは認識しません.
これはsjis-jskyと区別できなくなるためです.
また, この
作用による誤認識を防ぐため,
euc-jpにおいても,
同様にエスケープ文字を受け付けなく
なっています.
- $code = $s->getcodelist($str)
- $str: 文字列
- $code:
文字コードを表す文字列
渡された文字列($str)の文字コードを自動判別します.
getcode とは違い,
すべての受理可能な文字コードの
一覧を返します.
- $str = $s->conv($ocode, $encode)
- $ocode: 出力コード
(以下から指定)
-
utf8 ucs2 ucs4 utf16
sjis cp932 euc euc-jp jis
sjis-imode sjis-imode1 sjis-imode2
utf8-imode utf8-imode1 utf8-imode2
sjis-doti sjis-doti1
sjis-jsky sjis-jsky1 sjis-jsky2
jis-jsky jis-jsky1 jis-jsky2
utf8-jsky utf8-jsky1 utf8-jsky2
sjis-au sjis-au1 sjis-au2
jis-au jis-au1 jis-au2
sjis-icon-au sjis-icon-au1 sjis-icon-au2
euc-icon-au euc-icon-au1 euc-icon-au2
jis-icon-au jis-icon-au1 jis-icon-au2
utf8-icon-au utf8-icon-au1 utf8-icon-au2
binary
( も参照.)
携帯向け文字コードのうち,末尾に数字がついているものは,数字が大きいほど
大きな絵文字セット(最新機種の絵文字セット)を表しています.
数字なしのものは,もっとも数字が大きい文字コードと同一です.
- $encode:
バイナリ符号化方式.省略可.
- $str: 文字列
文字列を指定した文字コードに変換してから取り出します.
文字エンコードには,'base64'
のみ指定可能です.
base64
を指定した場合は,base64
エンコードされた
文字列が返されます.
perl-5.8.0 以降において,
出力は utf-8
フラグを持たないバイト列になります.
- $s->tag2bin
- 文字列中に含まれる
&#dddd;
形式の文字列を,それが表す文字自体に置き換えます.
- $s->z2h
- 全角を半角に変換します.
- $s->h2z
- 半角を全角に変換します.
- $s->hira2kata
- ひらがなをカタカナに変換します.
- $s->kata2hira
- カタカナをひらがなに変換します.
- $str = $s->jis
- $str: JIS
エンコーディング形式のバイト列
文字列を
JIS(ISO-2022-JP)
コードで取り出します.
- $str = $s->euc
- $str: euc-jp
エンコーディング形式のバイト列
文字列を EUC-JP
コードで取り出します.
- $str = $s->utf8
- $str: utf-8
エンコーディング形式のバイト列
文字列を UTF-8
コードで取り出します.
perl-5.8.0
以降においても,
バイト列を返します.
- $str = $s->ucs2
- $str: ucs2
エンコーディング形式のバイト列
文字列を UCS2
コードで取り出します.
- $str = $s->ucs4
- $str: ucs4
エンコーディング形式のバイト列
文字列を UCS4
コードで取り出します.
- $str = $s->utf16
- $str: ucs-16
エンコーディング形式のバイト列
文字列を UTF-16
コードで取り出します.
BOMは付きません.
ビックエンディアン形式で返されます.
- $str = $s->sjis
- $str: sjis
エンコーディング形式のバイト列
文字列を SJIS(MS-CP932)
コードで取り出します.
- $str = $s->sjis_imode
- $str: sjis/imode絵文字
エンコーディング形式のバイト列
文字列を i-mode
端末向けの SJIS
コードで取り出します.
最新のimode絵文字の別名です.
- $str = $s->sjis_imode1
- $str: sjis/imode 絵文字
エンコーディング形式のバイト列
文字列を i-mode
端末向けの SJIS
コードで取り出します.
基本絵文字だけから成ります.
- $str = $s->sjis_imode2
- $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
コードで取り出します.
最新のj-sky絵文字(VERSION 0.15
では, jsky2)の別名です.
- $str = $s->sjis_jsky1
- $str: sjis/j-sky 絵文字
エンコーディング形式のバイト列
文字列を j-sky
端末向けの SJIS
コードで取り出します.
Page 1~3
のみの絵文字を含みます.
- $str = $s->sjis_jsky
- $str: sjis/j-sky 絵文字
エンコーディング形式のバイト列
文字列を j-sky
端末向けの SJIS
コードで取り出します.
Page 1~6
の絵文字を含みます.
- $str = $s->sjis_icon_au
- $str: sjis/AU iconタグ
エンコーディング形式のバイト列
文字列を AU
端末向けの SJIS
コードで取り出します.
- $str_arrayref = $s->strcut($len)
- $len:
分割する文字数(全角相当)
- $str_arrayref: 文字列
$lenで指定された文字数(全角)以下の文字列の配列に分割します.
配列の各要素は, utf-8
フラグを持ったutf-8文字列です.
- $len = $s->strlen
- $len:
文字列の表示幅
UTF-8 文字に対して
length()
を使うと全角文字は1文字あたり長さ
3
になってしまいますが,
このメソッドを使用すると,従来の
SJIS
のように,全角文字は1文字あたり長さ
2 を返します.
- $s->join_csv(@values);
- @values: データ配列
配列を CSV
文字列に変換し,インスタンスに格納します.
文字列の最後には改行("\n")が追加されます.
- @values = $s->split_csv;
- @values: データ配列
インスタンスに格納されている文字列を
CSV
と見なし,配列に分割します.
文字列の最後にある改行("\n")は取り除かれてから分割されます.
入力が binary
でなければ utf-8
文字列を返します. binary
だったときはバイト列を返します.
+---------------+----+-----+-------+
|encoding | in | out | guess |
+---------------+----+-----+-------+
|auto : OK : -- | ----- |
+---------------+----+-----+-------+
|utf8 : OK : OK | OK |
|ucs2 : OK : OK | ----- |
|ucs4 : OK : OK | ----- |
|utf16-be : OK : -- | ----- |
|utf16-le : OK : -- | ----- |
|utf16 : OK : OK | OK(#) |
|utf32-be : OK : -- | OK |
|utf32-le : OK : -- | OK |
|utf32 : OK : -- | OK(#) |
+---------------+----+-----+-------+
|sjis : OK : OK | OK |
|cp932 : OK : OK | ----- |
|euc : OK : OK | OK |
|euc-jp : OK : OK | ----- |
|jis : OK : OK | OK |
+---------------+----+-----+-------+
|sjis-imode : OK : OK | OK |
|sjis-imode1 : OK : OK | ----- |
|sjis-imode2 : OK : OK | ----- |
|utf8-imode : OK : OK | ----- |
|utf8-imode1 : OK : OK | ----- |
|utf8-imode2 : OK : OK | ----- |
+---------------+----+-----+-------+
|sjis-doti : OK : OK | OK |
|sjis-doti1 : OK : OK | ----- |
+---------------+----+-----+-------+
|sjis-jsky : OK : OK | OK |
|sjis-jsky1 : OK : OK | ----- |
|sjis-jsky2 : OK : OK | ----- |
|jis-jsky : OK : OK | ----- |
|jis-jsky1 : OK : OK | ----- |
|jis-jsky2 : OK : OK | ----- |
|utf8-jsky : OK : OK | ----- |
|utf8-jsky1 : OK : OK | ----- |
|utf8-jsky2 : OK : OK | ----- |
+---------------+----+-----+-------+
|sjis-au : OK : OK | OK |
|sjis-au1 : OK : OK | ----- |
|sjis-au2 : OK : OK | ----- |
|jis-au : OK : OK | ----- |
|jis-au1 : OK : OK | ----- |
|jis-au2 : OK : OK | ----- |
|sjis-icon-au : OK : OK | ----- |
|sjis-icon-au1 : OK : OK | ----- |
|sjis-icon-au2 : OK : OK | ----- |
|euc-icon-au : OK : OK | ----- |
|euc-icon-au1 : OK : OK | ----- |
|euc-icon-au2 : OK : OK | ----- |
|jis-icon-au : OK : OK | ----- |
|jis-icon-au1 : OK : OK | ----- |
|jis-icon-au2 : OK : OK | ----- |
|utf8-icon-au : OK : OK | ----- |
|utf8-icon-au1 : OK : OK | ----- |
|utf8-icon-au2 : OK : OK | ----- |
+---------------+----+-----+-------+
|ascii : OK : -- | OK |
|binary : OK : OK | ----- |
+---------------+----+-----+-------+
(#): guessed when it has bom.
1. utf32 (#)
2. utf16 (#)
3. utf32-be
4. utf32-le
5. ascii
6. jis
7. sjis-jsky (pp)
8. euc
9. sjis
10. sjis-jsky (xs)
11. sjis-au
12. sjis-imode
13. sjis-doti
14. utf8
15. unknown
Unicode
とのマッピングは以下のように行われます.
- Shift_JIS
- MS-CP932 として Unicode
へマッピングを行います.
マッピングテーブルは以下のURLのものを使用しています.
<ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT>
Unicode から SJIS
へマッピングする場合に,表現できない文字があると,
その文字は &#dddd;
形式に変換します.
ただし,携帯絵文字は「?」に変換されます.
また,携帯向けの
SJIS
へ変換するときは,全ての表現できない文字は「?」に変換されます.
- EUC-JP/ISO-2022-JP
- 一度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
絵文字にマッピングするとき,
1バイト目が同一である絵文字が連続している場合は,圧縮処理を自動的に行います.
- AU
- 絵文字が存在する部分を,U+0FF500
- U+0FF6FF
の領域にマッピングします.
use Unicode::Japanese qw(PurePerl);
use 時の引数に
'PurePerl'
を与えることで,
XSを使わないことを明示的に宣言できます.
バグや要望は
"bug-unicode-japanese at rt.cpan.org"
宛に
報告してください.
若しくは
<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Unicode-Japanese>.
にある web
インターフェースからでもかまいません.
そこから私に通知され,
そして私が変更を行うことで報告頂いたバグの進捗は
自動的にあなたに伝わります.
- EUC-JP,JIS コードは,SJIS
に変換されてから UTF-8
へ変換されるため,
SJIS
で表現できない文字列は正しく変換することはできません.
- XSを使用している場合,EUC-JP,SJIS(絵文字含む)コードの文字列中に
\e
が含まれると,EUC-JP,SJIS
コードの判定に失敗し,
正しく自動判別や変換を行うことが出来ません.
- Japanese.pm
はファイル後半にバイナリを含むため,FTP
の ASCII モードで
転送するとファイルが壊れます.
このモジュールのドキュメントは
perldoc
コマンドで見ることが出来ます.
perldoc Unicode::Japanese
また,
以下の場所でも見ることが出来ます:
- AnnoCPAN: Annotated CPAN documentation
<http://annocpan.org/dist/Unicode-Japanese>
- CPAN Ratings
<http://cpanratings.perl.org/d/Unicode-Japanese>
- RT: CPAN's request tracker
<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Unicode-Japanese>
- Search CPAN
<http://search.cpan.org/dist/Unicode-Japanese>
Thanks very much to:
NAKAYAMA Nao
SUGIURA Tatsuki & Debian JP Project
Copyright 2001-2008 SANO Taku (SAWATARI Mikage) and YAMASHINA Hio, all rights
reserved.
このプログラムはフリーソフトウェアです。あなたは
Perl と同じ
ライセンスの
元で再配布及び変更を行うことが出来ます.
Visit the GSP FreeBSD Man Page Interface. Output converted with ManDoc. |