Index: lang/perl/Encode-JP-Mobile/trunk/lib/Encode/JP/Mobile/Basics.pod
===================================================================
--- lang/perl/Encode-JP-Mobile/trunk/lib/Encode/JP/Mobile/Basics.pod (revision 6317)
+++ lang/perl/Encode-JP-Mobile/trunk/lib/Encode/JP/Mobile/Basics.pod (revision 6317)
@@ -0,0 +1,308 @@
+=encoding utf-8
+
+=head1 NAME
+
+Encode::JP::Mobile::Basics - 絵文字の基礎知識
+
+=head1 DESCRIPTION
+
+これは L<Encode::JP::Mobile> を理解する上で知っておくと役だつ、日本の携帯電話の絵文字まわりの仕様をまとめた資料です。
+
+記述に関してはできるだけ公式資料の URL を併記していますので合わせて参照してください。公式資料に言及されていない内容については [unofficial] を併記してあります。
+
+=head1 DoCoMo
+
+=over 4
+
+=item * B<絵文字リスト>: 
+
+=over 4
+
+=item * 基本 L<http://www.nttdocomo.co.jp/service/imode/make/content/pictograph/basic/index.html>
+
+=item * 拡張 L<http://www.nttdocomo.co.jp/service/imode/make/content/pictograph/extention/index.html>
+
+=back
+
+=back
+
+=head2 Web
+
+=over 4
+
+=item * B<表示できる charset>: shift_jis, XHTML対応機種（ほとんど全ての FOMA）は utf-8も可。L<http://www.nttdocomo.co.jp/service/imode/make/content/xhtml/index.html>(XHTML), L<http://www.nttdocomo.co.jp/service/imode/make/content/html/index.html>(HTML)。
+
+=item * B<絵文字の表記方法>: L<http://www.nttdocomo.co.jp/service/imode/make/content/pictograph/howto/index.html>
+
+以下はすべて “晴れ” の絵文字を表示する方法を Perl コードで例示したものです。
+
+    # sjisコード
+    print "\xF8\x9F"; # ページのcharset=shift_jisの場合のみ 
+ 
+    # unicodeの16進実体参照
+    print '&#xE63E;'; # iモード対応HTML4.0対応機種のみ（ほぼ全て） 
+    
+    # sjisコードの10進実体参照
+    print '&#63647;'; # 基本絵文字のみで、ページのcharset=shift_jisの場合のみ 
+    
+    # unicodeのutf-8コード [unofficial]
+    print "\xEE\x98\xBE"; # ページのcharset=utf-8の場合のみで、かつFOMAのみ 
+
+=item * B<フォームから送出される絵文字>: 下記のとおり。
+
+=over 4
+
+=item * charset=shift_jis から: sjis コード。例: C<\xF8\x9F>
+
+=item * charset=utf-8 から（FOMA）: unicode の utf-8 コード。例: C<\xEE\x98\xBE>
+
+=item * charset=euc-jp から: FOMA は絵文字だけ送ってこない模様
+
+=back
+
+=back
+
+=head2 Mail
+
+=over 4
+
+=item * B<表示できる charset>: iso-2022-jp, shift_jis, utf-8（[unofficial]）。
+
+=item * B<絵文字の表記方法>: shift_jis か iso-2022-jp で sjis コードを埋め込む。
+
+以下は L<MIME::Lite/build> に渡すパラメータに模した Perl コードの例です。
+
+    # shift_jis
+    Subject  => '=?Shift_JIS?B?'. encode_base64("\xF8\x9F") .'?=',
+    Type     => 'text/plain; charset=shift_jis',
+    Encoding => 'base64',
+    Data     => "\xF8\x9F",
+    
+    # iso-2022-jp
+    Subject  => '=?ISO-2022-JP?B?'. encode_base64("\xF8\x9F") .'?=',
+    Type     => 'text/plain; charset=iso-2022-jp',
+    Encoding => 'base64',
+    Data     => "\xF8\x9F",
+
+=item * B<キャリア間の相互変換>: L<http://www.nttdocomo.co.jp/service/mail/imode_mail/emoji_convert/index.html>
+
+端末から携帯以外のアドレスにメールを送った場合、iso-2022-jp で、絵文字は一律ゲタとなってしまいます。
+
+=back
+
+=head1 KDDI/AU
+
+=over 4
+
+=item * B<絵文字リスト>: L<http://www.au.kddi.com/ezfactory/tec/spec/pdf/typeD.pdf>
+
+=back
+
+=head2 Web
+
+=over 4
+
+=item * B<表示できる charset>: shift_jis。L<http://www.au.kddi.com/ezfactory/tec/spec/4_2.html>。XHTML対応機種（WIN と一部の 1X）の場合 utf-8 や euc-jp も使えるようだが文字化けすることがある。
+
+=item * B<絵文字の表記方法>: L<http://www.au.kddi.com/ezfactory/tec/spec/3.html>
+
+以下はすべて “晴れ” の絵文字を表示する方法を Perl コードで例示したものです。尚 HDML については省略します。
+
+    # <img localsrc="絵文字番号または絵文字名" />
+    print '<img localsrc="44" />';
+    print '<img localsrc="sun" />'; # 半[unofficial]
+    
+    # sjisコードの16進実体参照 [unofficial]
+    print '&#xF660;';
+    
+    # sjisコードの10進実体参照 [unofficial]
+    print '&#63072;';
+
+以上は WIN/1X 問わず、ページの charset も shift_jis/utf-8/euc-jp 問わず利用できるものですが、以下は特定の場合にのみ表示できる方法です。「裏KDDI Unicode」については L<こちらを参照|Encode::JP::Mobile/"x-sjis-kddi-auto"> してください。
+
+    # sjisコード [unofficial]
+    print "\xF6\x60"; # 1X/WIN共にsjisのページでのみ表示できる
+    
+    # 「裏KDDI Unicode」のutf-8コード [unofficial]
+    print "\xEE\xBD\xA0"; # 1X/WIN共にutf-8のページでのみ表示できる
+    
+    # unicodeの16進実体参照 [unofficial]
+    print '&#xE488;'; # 1Xの古い機種で不可の模様
+    
+    # unicodeの10進実体参照 [unofficial]
+    print '&#58504;'; # 1Xの古い機種で不可の模様
+
+さらに、au 端末はドコモの文字も表示することができますので、 “晴れ” を出したいのであれば以下のようにドコモのコード（と表記方法）をそのまま使うこともできます。L<http://www.au.kddi.com/ezfactory/tec/spec/html_con004.html>
+
+    # ドコモのsjisコード
+    print "\xF8\x9F"; # ページのcharset=shift_jisの場合のみ
+    
+    # ドコモのunicodeの16進実体参照
+    print '&#xE63E;'; # iモード対応HTML4.0対応機種のみ（ほぼ全て）
+    
+    # ドコモのsjisコードの10進実体参照
+    print '&#63647;'; # 基本絵文字のみで、ページのcharset=shift_jisの場合のみ
+
+=item * B<フォームから送出される絵文字>: 下記のとおり。
+
+=over 4
+
+=item * charset=shift_jis から: sjis コード。例: C<\xF6\x60>
+
+=item * charset=utf-8 から: 裏KDDI Unicode の utf-8 コード。例: C<\xEE\xBD\xA0>
+
+=item * charset=euc-jp から: 一律 C<\x3F> (?) となる模様
+
+=back
+
+=back
+
+=head2 Mail
+
+=over 4
+
+=item * B<表示できる charset>: iso-2022-jp, shift_jis。L<http://www.au.kddi.com/ezfactory/tec/spec/3.html>
+
+=item * B<絵文字の表記方法>: sjis コードを埋め込む。WINの場合「（参考）Eメール送出用JISコードに対応したShift-JISコード」も使える。Subject を MIME エンコードすると化ける（解釈されない）ので注意。
+
+    # shift_jis
+    Subject  => "\xF6\x60",
+    Type     => 'text/plain; charset=shift_jis',
+    Encoding => 'base64',
+    Data     => "\xF6\x60",
+    
+    # iso-2022-jp
+    Subject  => "\xF6\x60",
+    Type     => 'text/plain; charset=iso-2022-jp',
+    Encoding => 'base64',
+    Data     => "\xF6\x60",
+
+=item * B<キャリア間の相互変換>: L<http://www.au.kddi.com/email/emoji/taiohyo/>
+
+端末から携帯以外のアドレスにメールを送った場合、iso-2022-jp で、絵文字はリストの「Eメール送出用JISコード」で届きます。（例: C<\x75\x41>）
+
+=back
+
+=head1 SoftBank
+
+=over 4
+
+=item * B<絵文字リスト>: L<http://developers.softbankmobile.co.jp/dp/tool_dl/web/picword_top.php>
+
+=back
+
+=head2 Web
+
+=over 4
+
+=item * B<表示できる charset>: shift_jis, utf-8, euc-jp 。L<http://developers.softbankmobile.co.jp/dp/tool_dl/web/tech.php>(HTML編 103-111-HTML_2.0.0.pdf p.30, XHTML編 104-011-XHTML_2.0.0.pdf p33)
+
+=item * B<絵文字の表記方法>: L<http://developers.softbankmobile.co.jp/dp/tool_dl/web/tech.php>(HTML編 103-111-HTML_2.0.0.pdf pp.30-47)
+
+以下はすべて “晴れ” の絵文字を表示する方法を Perl コードで例示したものです。
+
+    # Webコード: エスケープシーケンス開始(\x1B\x24) + コード + エスケープ終わり(\x0F)
+    print "\x1B\x24Gj\x0F";
+    print "\x1B\x24\x47\x6A\x0F";
+    
+    # unicodeのutf-8コード
+    print "\xEE\x81\x8A"; # ページのcharset=utf-8の場合のみ
+    
+    # unicodeの16進実体参照
+    print '&#xE04A;';
+    
+    # unicodeの10進実体参照
+    print '&#57418;';
+    
+    # x-sjis-softbank-auto のsjisコード[unofficial]
+    print "\xE0\x4A"; # ページのcharset=shift_jisの場合のみ
+
+=item * B<フォームから送出される絵文字>: 下記のとおり。
+
+=over 4
+
+=item * charset=utf-8 から: unicode の utf-8 コード。例: C<\xEE\x81\x8A>
+
+=item * charset=shift_jis から: 3GC 端末の場合 x-sjis-softbank-auto な sjis（例: C<\xF6\x60>）/ それ以前の端末は Web コード（例: C<\x1B\x24\x47\x6A\x0F>）
+
+=item * charset=euc-jp から: shift_jis と同じ模様
+
+=back
+
+=back
+
+=head2 Mail
+
+=over 4
+
+=item * B<表示できる charset>: iso-2022-jp, utf-8, shift_jis。
+
+=item * B<絵文字の表記方法>: 絵文字を出すには、utf-8 に utf-8 コードで入れるのが良い模様。
+
+    # utf-8
+    Subject  => '=?UTF-8?B?'. encode_base64("\xEE\x81\x8A") .'?=',
+    Type     => 'text/plain; charset=utf-8',
+    Encoding => 'base64',
+    Data     => "\xEE\x81\x8A",
+
+=item * B<キャリア間の相互変換>: L<http://mb.softbank.jp/mb/service/3G/mail/pictogram/>
+
+端末から携帯以外のアドレスにメールを送った場合、iso-2022-jp で、絵文字は一律ゲタとなってしまいます。ただし Yahoo メール（@yahoo.co.jp） 宛ては特別で、Yahoo メール上で画像で絵文字を見ることができます。
+
+=back
+
+=head1 Willcom
+
+=over 4
+
+=item * B<絵文字リスト>: L<http://www.willcom-inc.com/ja/service/contents_service/club_air_edge/for_phone/homepage/pdf/contents_reference.pdf>(p.30)
+
+=back
+
+=head2 Web
+
+=over 4
+
+=item * B<表示できる charset>: 
+
+=item * B<絵文字の表記方法>: 
+
+    # TODO
+
+=item * B<フォームから送出される絵文字>: 
+
+=over 4
+
+=item * charset=utf-8 から: 
+
+=item * charset=shift_jis から: 
+
+=item * charset=euc-jp から: 
+
+=back
+
+=back
+
+=head2 Mail
+
+=over 4
+
+=item * B<表示できる charset>: 
+
+=item * B<絵文字の表記方法>: 
+
+    # TODO
+
+=item * B<キャリア間の相互変換>: 
+
+=back
+
+=head1 SEE ALSO
+
+L<Encode::JP::Mobile>, L<Encode::JP::Mobile::CookBook>
+
+=head1 AUTHORS
+
+Naoki Tomita E<lt>tomita@cpan.orgE<gt>
+
+Patches and suggestions are always welcome.
Index: lang/perl/Encode-JP-Mobile/trunk/lib/Encode/JP/Mobile/Cookbook.pod
===================================================================
--- lang/perl/Encode-JP-Mobile/trunk/lib/Encode/JP/Mobile/Cookbook.pod (revision 6317)
+++ lang/perl/Encode-JP-Mobile/trunk/lib/Encode/JP/Mobile/Cookbook.pod (revision 6317)
@@ -0,0 +1,154 @@
+=encoding utf-8
+
+=head1 NAME
+
+Encode::JP::Mobile::CookBook - Encode::JP::Mobile のレシピ集
+
+=head1 DESCRIPTION
+
+このドキュメントでは、Encode::JP::Mobile の使い方についていくつかのヒントを紹介します。
+
+=head1 どのエンコーディングを使えばよいか
+
+各端末へ絵文字を相互変換しつつ出し分けるには、各端末に適したエンコーディングで decode/encode します。エンコーディング名は L<HTTP::MobileAgent> と組み合わせ以下のように決めるとよいでしょう。
+
+    use HTTP::MobileAgent;
+    
+    my $agent = HTTP::MobileAgent->new;
+    my $encoding = detect_encoding($agent);
+    
+    sub detect_encoding {
+        my $agent = shift;
+        if ($agent->is_docomo) {
+            return $agent->xhtml_compliant ? 'x-utf8-docomo' : 'x-sjis-docomo';
+        } elsif ($agent->is_ezweb) {
+            return 'x-sjis-kddi-auto';
+        } elsif ($agent->is_vodafone) {
+           return $agent->is_type_3gc ? 'x-utf8-softbank' : 'x-sjis-softbank';
+        } elsif ($agent->is_airh_phone) {
+            return 'x-sjis-airh';
+        } else { # $agent->is_non_mobile には utf-8 とします
+            return 'utf-8';
+        }
+    }
+
+=head2 さらに楽をする
+
+例の C<detect_encoding()> サブルーチンを毎回コピーする必要はありません。これは L<HTTP::MobileAgent::Plugin::Charset> というモジュールとしてパッケージ化されています。これを利用すると、HTTP::MobileAgent オブジェクトで C<encoding()> などのメソッドが使えるようになり、以下のように楽に適したエンコーディング名を取得できます。
+
+    use HTTP::MobileAgent;
+    use HTTP::MobileAgent::Plugin::Charset;
+    
+    my $agent = HTTP::MobileAgent->new;
+    my $encoding = $agent->encoding; # これだけ！
+
+=head2 利用イメージ
+
+まだよく実際に decode/encode するイメージがつかめないという人のため、簡略化した CGI スクリプトを示します。
+
+    use CGI;
+    use HTTP::MobileAgent;
+    use HTTP::MobileAgent::Plugin::Charset;
+    use Encode;
+    use Encode::JP::Mobile;
+    
+    my $cgi = CGI->new;
+    my $agent = HTTP::MobileAgent->new;
+    my $encoding = $agent->encoding;
+    
+    if ($cgi->request_method eq 'POST') {
+        # 端末からの入力は端末に合わせたエンコーディングで decode し任意の処理を行い...
+        my $data = decode($encoding, $cgi->param('text'));
+        
+        # DB などへは utf-8 で保存.
+        open(my $fh, '>>', '/tmp/test.txt');
+        print {$fh} encode('utf-8', $data);
+        close $fh;
+    }
+    
+    # DB などからは普通に utf-8 で取り出し任意の処理を行い...
+    open(my $fh, '<', '/tmp/test.txt');
+    my $data = decode('utf-8', join "", <$fh>);
+    
+    # 出力する時は、端末に合わせたエンコーディングで encode してやります.
+    my $charset = $encoding =~ /sjis/ ? 'shift_jis' : 'utf-8';
+    my $html = <<HTML
+    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+    <html>
+    <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=$charset" />
+    </head>
+    <body>
+    <form action="$ENV{SCRIPT_NAME}" method="POST">
+    <input type="text" name="text" />
+    <input type="submit">
+    </form>
+    <p>$data</p>
+    </body>
+    </html>
+    HTML
+    ;
+    print $cgi->header(-charset => $charset);
+    print encode($encoding, $html);
+
+=head1 対応する絵文字がないものを文字で表現する
+
+上の例のようにエンコーディング名を切り替えるだけで、キャリアが行っている相互変換と同じマッピングで絵文字を出し分けることができます。
+
+ただし、対応する絵文字がない場合は ? となります（L<Encode::FB_DEFAULT|Encode/Handling_Malformed_Data> の場合）。キャリアは対応する絵文字がない場合 (>３<) のように文字で表現したりしていますが、これと同じことをするには、Encode の fallback を使って以下のように行います。
+
+    # TODO
+
+=head1 PC 向けに絵文字を代替表現する
+
+PC 向けに携帯で入力された絵文字を [台風] といったように文字で代替表現するには、L<':props' オプション|Encode::JP::Mobile/UNICODE_PROPERTIES>と L<Encode::JP::Mobile::Character> を使い以下のように全絵文字を置換することができます。
+
+    use Encode::JP::Mobile ':props';
+    use Encode::JP::Mobile::Charnames;
+    
+    $html =~ s{(\p{InMobileJPPictograms})}{
+        my $char = Encode::JP::Mobile::Character->from_unicode(ord $1);
+        sprintf '[%s]', $char->name;
+    }ge;
+    
+    print encode('utf-8', $html); # 例：いい天気[太陽]
+
+=head2 表現を変える
+
+上の方法だと PC ユーザーへ意味を伝えることはできますが、C<< $char->name >> はキャリアのページの絵文字一覧表にある名前を返すものなので、[丸に斜め線] や [羽のはえたお札] といった説明的な表現になってしまうものがあります。
+
+これらについて、別の表現にしたい場合は以下のように自分でマップを持ち変換するとよいでしょう。
+
+    use utf8;
+    my $fallback_name = {
+        E => {
+            31 => '(禁止)',
+            459 => '（>人<）',
+            777 => '[お金]',
+        },
+    };
+    
+    $res =~ s{(\p{InMobileJPPictograms})}{
+        my $char = Encode::JP::Mobile::Character->from_unicode(ord $1);
+        $fallback_name->{$char->carrier}{$char->number} || 
+        sprintf('[%s]', $char->name);
+    }ge;
+
+=head2 画像で出す
+
+文字での表現には限界がありますので、結局絵文字の画像を用意してそれを出すのが一番再現度合いが高いです。例えば http://example.com/img/pictogram/<unicode codepoint>.gif というように絵文字画像を用意した場合は以下のように置換することができます。
+
+    $res =~ s{(\p{InMobileJPPictograms})}{
+        my $char = Encode::JP::Mobile::Character->from_unicode(ord $1);
+        sprintf 'http://example.com/img/pictogram/%s.gif', $char->unicode_hex;
+    }ge;
+
+=head1 SEE ALSO
+
+L<Encode::JP::Mobile>, L<Encode::JP::Mobile::Basics>
+
+=head1 AUTHORS
+
+Naoki Tomita E<lt>tomita@cpan.orgE<gt>
+
