Show
Ignore:
Timestamp:
02/09/08 21:10:04 (7 years ago)
Author:
tomi-ru
Message:

perl/Encode-JP-Mobile: props周りを整理

Location:
lang/perl/Encode-JP-Mobile/trunk/lib/Encode/JP
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Encode-JP-Mobile/trunk/lib/Encode/JP/Mobile.pm

    r6445 r6447  
    134134  } 
    135135 
    136  
    137136=head1 DESCRIPTION 
    138137 
     
    244243  # $bytes は DoCoMo の "晴れ" 絵文字を UTF-8 でエンコードしたもの 
    245244 
    246 これらのエンコードは基本的にラウンドトリップ可能ですが、UTF-8のサブセットであるため、CP932 および携帯絵文字以外の文字をエンコード・デコードすることはできません。また、各キャリア間で変換不可能な文字についても対応するマッピングが存在しない場合がありますので、C<FB_XMLCREF> などの fallback や、カスタムコールバックなどを利用して代替文字を表示する必要があります。 
    247  
    248 詳しくは L<http://mobilehacker.g.hatena.ne.jp/tokuhirom/20080116/1200501202> 
    249 や L<http://mobilehacker.g.hatena.ne.jp/tomi-ru/20071116/1195186373> などを参照。 
     245これらのエンコードは基本的にラウンドトリップ可能ですが、UTF-8のサブセットであるため、CP932 および携帯絵文字以外の文字をエンコード・デコードすることはできません。また、各キャリア間で変換不可能な文字についても対応するマッピングが存在しない場合がありますので、L<Encode::JP::Mobile::FB_CHARACTER> や カスタムコールバックなどを利用して代替文字を表示する必要があります。 
    250246 
    251247I<x-utf8-airh>, I<x-utf8-airedge> は存在しません。Willcom 端末は utf8 でページを表示している場合には絵文字の表示ができないようです。詳しくは L<http://mobilehacker.g.hatena.ne.jp/tokuhirom/20080118/1200637282> を参照。Willcom 端末で絵文字を表示させたい場合には I<x-sjis-airh>, I<x-sjis-airedge> をご利用ください。 
     
    267263=over 4 
    268264 
    269 =item InMobileJPPictograms 
    270  
    271 =item InDoCoMoPictograms 
    272  
    273 =item InKDDIPictograms 
    274  
    275 =item InSoftBankPictograms 
    276  
    277 =item InAirEdgePictograms 
    278  
    279 =item InKDDISoftBankConflicts 
    280  
    281 =item InKDDICP932Pictograms 
    282  
    283 =item InKDDIAutoPictograms 
    284  
    285 =item InMobileJPPictograms 
     265=item * InMobileJPPictograms 
     266 
     267Encode::JP::Mobile であつかうすべての絵文字にマッチします。 
     268 
     269=item * InDoCoMoPictograms 
     270 
     271=item * InKDDIPictograms 
     272 
     273=item * InSoftBankPictograms 
     274 
     275=item * InAirEdgePictograms 
     276 
     277これらはそれぞれそのキャリアの表示できる絵文字にマッチします。 
     278 
     279=item * InKDDICP932Pictograms 
     280 
     281=item * InKDDIAutoPictograms 
     282 
     283I<InKDDICP932Pictograms>, I<InKDDIAutoPictograms> はそれぞれ、I<x-sjis-kddi>, I<x-sjis-kddi-auto> のマッピングによって得られる Unicode 私用領域のレンジをあらわし、I<InKDDIPictograms> はその双方を含みます。 
     284 
     285=item * InKDDISoftBankConflicts 
     286 
     287SoftBank と KDDI (x-sjis-kddi を利用した場合) の Unicode 私用領域の重複する文字列を含んでいます。 
    286288 
    287289=back 
    288  
    289 I<InMobileJPPictograms> は Encode::JP::Mobile であつかうすべての絵文字にマッチします。 
    290  
    291 I<InKDDIPictograms> はCP932ベースと裏KDDI Unicodeの双方を含みます。 
    292  
    293 入力が Shift_JIS である場合、まずどの x-sjis-* に対応するかを判別した上でデコードし、Unicode コードポイントを得たあとでないとキャリアを見分けることができません。よって入力が UTF-8 である場合や、いったん x-sjis-* を利用してデコードしたものに対して使うと便利でしょう。 
    294  
    295 InKDDISoftBankConflicts は SoftBank と KDDI (x-sjis-kddi を利用した場合) の Unicode 私用領域の重複する文字列を含んでいます。以下のようなコードで、元々の絵文字が KDDI のものであったか、SoftBank のものであったか判定することが可能です(文字列に含まれる絵文字が重複部分のみの場合、判定することはできません)。 
    296  
    297   my $string = ...; 
    298  
    299   if ($string =~ /\p{InKDDISoftBankConflicts}/) { 
    300       eval { Encode::encode("x-sjis-kddi", $string, Encode::FB_CROAK) }; 
    301       if ($@) { 
    302           # softbank 
    303       } else { 
    304           # KDDI 
    305       } 
    306   } 
    307  
    308 I<InKDDICP932Pictograms>, I<InKDDIAutoPictograms> はそれぞれ、I<x-sjis-kddi>, I<x-sjis-kddi-auto> のマッピングによって得られる Unicode 私用領域のレンジをあらわし、InKDDIPictograms はその2つをマージしたものとして扱われます。 
    309290 
    310291=head1 BACKWARD COMPATIBLITY 
  • lang/perl/Encode-JP-Mobile/trunk/lib/Encode/JP/Mobile/Basics.pod

    r6435 r6447  
    224224=item * charset=utf-8 から: unicode の utf-8 コード。例: C<\xEE\x81\x8A> 
    225225 
    226 =item * charset=shift_jis から: 3GC 端末の場合 x-sjis-softbank-auto な sjis(例: C<\xF6\x60>)/ それ以前の端末は Web コード(例: C<\x1B\x24\x47\x6A\x0F> 
     226=item * charset=shift_jis から: 3GC 端末の場合 x-sjis-softbank-auto な sjis(例: C<\xF6\x60>)/ それ以前の端末は Web コード(例: C<\x1B\x24\x47\x6A\x0F>。絵文字が続いた場合はエスケープシーケンス内にコードが続く場合がある 
    227227 
    228228=item * charset=euc-jp から: shift_jis と同じ模様 
  • lang/perl/Encode-JP-Mobile/trunk/lib/Encode/JP/Mobile/Cookbook.pod

    r6436 r6447  
    163163  [% body | pictogram_unicode('<img src="/img/pictogram/%X.gif" />') %] 
    164164 
    165 =head1 KDDI 表を裏へコンバートする 
     165=head1 KDDI の表と裏の話題 
     166 
     167=head2 表を裏へコンバートする 
    166168 
    167169v0.06 以前の Encode::JP::Mobile を使っていた場合など、au の絵文字を含むテキストを C<shift_jis-kddi> や C<x-sjis-kddi> で decode し、DB へ utf-8 で保存していたケースがあると思います。それらのエンコーディングは仕様書にある Unicode コードポイントでマップしていますので、SoftBank との重複部分があり相互変換時に違う絵文字になってしまうことがあります。重複のない kddi-auto でのマッピングに変更するには、以下のような関数でデータをコンバートできます。 
     
    177179  } 
    178180 
     181=head2  KDDI・SoftBank どちらからのテキストだったか 
     182 
     183L<Encode::JP::Mobile/UNICODE_PROPERTIES> の C<\p{InKDDISoftBankConflicts}> を利用し、以下のようなコードで、元々の絵文字が KDDI のものであったか、SoftBank のものであったか判定することが可能です(文字列に含まれる絵文字が重複部分のみの場合、判定することはできません)。 
     184 
     185  my $string = ...; 
     186 
     187  if ($string =~ /\p{InKDDISoftBankConflicts}/) { 
     188      eval { Encode::encode("x-sjis-kddi", $string, Encode::FB_CROAK) }; 
     189      if ($@) { 
     190          # softbank 
     191      } else { 
     192          # KDDI 
     193      } 
     194  } 
     195 
    179196=head1 SEE ALSO 
    180197