NAME
Encode::JP::Mobile::BestPractice.ja - Encode::JP::Mobile をクールにのりこなす
本文
utf-8 か Shift_JIS か
utf-8 が使える機種では utf-8 をつかった方がいいでしょう。
SoftBank 3G では sjis だと絵文字をカットしてしまう機種があるようなので、UTF-8 で サイトを構築せざるをえません。キャリアごとに文字コードが違うのもおかしな話ですから、 この際全部 utf-8 にしてしまいましょう。
ただし、SoftBank の W 型より前、EZweb の XHTML 非対応機種、DoCoMo の XHTML 非対応機種は utf-8 に対応していませんので、Shift_JIS を使う必要があります。
KDDI 絵文字領域はKDDI-AutoかKDDI-CP932か
KDDI の端末で絵文字にわりあてられている Unicode の領域は
CP932 ベースの 外字→Unicode PRIVATE AREA の領域
KDDI/AUでutf-8のHTMLフォームから送られてくる絵文字コード
の2つがあり、我々は便宜的に前者を KDDI-CP932, 後者を KDDI-Auto とよんでいます(これは仮称であり もっとクールな名前を思いつけばただちに rename されるでしょう)。
KDDI-CP932 は、SoftBank 絵文字のページ6とかぶっていることから、データベースに保存する際には KDDI-Auto 領域をつかうのがベストプラクティスです。
実際にどういうコードでエンコーディングを決定するか
下記のようなコードで適切な encoding を選定できます。
use HTTP::MobileAgent;
sub HTTP::MobileAgent::can_display_utf8 {
my $self = shift;
$self->xhtml_compliant;
}
sub HTTP::MobileAgent::AirHPhone::can_display_utf8 {
my $self = shift;
$self->get_header('Accept-Charset') =~ /utf-?8/i ? 1 : 0;
}
my $agent = HTTP::MobileAgent->new;
if ( $agent->is_non_mobile ) {
return 'utf-8';
} else {
if (!$agent->can_display_utf8 && $agent->is_ezweb) {
return 'x-sjis-kddi-auto'; # should use x-sjis-kddi-auto
} else {
my $charset = $agent->can_display_utf8 ? 'utf8' : 'sjis';
return join '-', 'x', $charset, lc( $agent->carrier_longname );
}
}
AUTHOR
Tokuhiro Matsuno
SEE ALSO
http://developers.SoftBankmobile.co.jp/dp/tool_dl/web/picword_06.php http://subtech.g.hatena.ne.jp/miyagawa/20071112/1194865208