GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
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
$str: 文字列(UTF-8)

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

現在は `バイト' 列 を返しますが, 将来的に変更される可能性もあります.

バイト列が必要なら utf8() メソッドを, 文字列が必要なら getu() メソッドを使うことをオススメします.

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

文字列を 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 と同じ ライセンスの 元で再配布及び変更を行うことが出来ます.

2012-02-10 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.