| Encode-JP-Mobile documentation | Contained in the Encode-JP-Mobile distribution. |
Encode::JP::Mobile::Fallback - custom callback for pictogram convert
use Encode;
use Encode::JP::Mobile;
encode('x-utf8-docomo', "\x{ECA2}", Encode::JP::Mobile::FB_CHARACTER); # => (>3<)
キャリアがメール送信時に行なっている絵文字の相互変換をエミュレートするためのコールバックです。
Encode::JP::Mobile で定義されたエンコーディングはキャリア間の 絵文字 => 絵文字(場合によっては複数の絵文字)相互変換をサポートしていますが、絵文字 => 文字 と変換されるものは含まれていません。Encode::JP::Mobile::FB_CHARACTER を Encode::encode の引数として渡すことでキャリアが行なう相互変換と同じことを行ないます。
my $char = "\x{EFC5}\x{ED8B}"; # au の宇宙人とバンザイ
encode('x-utf8-docomo', $char, Encode::JP::Mobile::FB_CHARACTER); # => [宇宙人]\(^o^)/
絵文字以外についての fallback の扱いについては、Encode::JP::Mobile::FB_CHARACTER に引数として渡すことができます。
my $char = "\x{2668}\x{ED8B}"; # 温泉マーク(x-utf8-docomoに含まれない)とバンザイ
encode('x-utf8-docomo', $char, Encode::JP::Mobile::FB_CHARACTER); # => ? \(^o^)/
encode('x-utf8-docomo', $char, Encode::JP::Mobile::FB_CHARACTER(Encode::FB_XMLCREF)); # => ♨\(^o^)/
my $fb_callback = Encode::JP::Mobile::FB_CHARACTER(sub {"[x]"});
encode('x-utf8-docomo', $char, $fb_callback); # [x]\(^o^)/
Encode::JP::Mobile::FB_CHARACTER は use Encode::JP::Mobile; で利用できます。use Encode::JP::Mobile::Fallback; する必要はありません。
Naoki Tomita <tomita@cpan.org>
| Encode-JP-Mobile documentation | Contained in the Encode-JP-Mobile distribution. |
package Encode::JP::Mobile::Fallback; use strict; use warnings; use Encode; use Encode::JP::Mobile ':props'; sub Encode::JP::Mobile::FB_CHARACTER { my $check = @_ ? shift : Encode::FB_DEFAULT; return sub { my $code = shift; my $char = chr $code; my $fallback_name; if ($char =~ /^\p{InMobileJPPictograms}$/) { my $obj = Encode::JP::Mobile::Character->from_unicode($code); for (qw( I V E )) { my $f = $obj->fallback_name($_); $fallback_name = $f if defined $f; } } return defined $fallback_name ? encode('utf-8', $fallback_name) : encode('x-utf8-docomo', $char, $check); # using x-utf8-docomo for "utf8 but that has cp932 chars only" }; } 1; __END__