キャリア絵文字とUnicode

シンボル Shift_JIS(CP932)+docomo絵文字仕様 Unicode PUA docomo仕様 Unicode PUA Google仕様
晴れ SJIS-F89F U+E63E U+FE000

キャリア絵文字をAndroidブラウザで表示するには、Unicode PUA Google仕様に変換する。
(Android4.0.x はdocomo仕様のPUAを表示できなかったため。4.2.x辺りからdocomo仕様のPUAでも表示できるようになったようだ。)

また、Shift_JIS(CP932)+docomo絵文字仕様に対応がない文字を代替文字?に置換するには以下のようにする。
org.apache.commons.codec.net.URLCodec#decode(byte[] bytes)を使うのがポイント。

    String ENCODING_UTF8 = "utf-8";
    String ENCODING_MS932 = "ms932";
    
    byte[] bytes = {
        (byte)0xf0, (byte)0xa0, (byte)0xae, (byte)0xb7, (byte)0x20, // ? (つちよし)
        (byte)0xe9, (byte)0x87, (byte)0x8e, (byte)0x20, // 野
        (byte)0xe5, (byte)0xae, (byte)0xb6, (byte)0x20, // 家
        (byte)0xee, (byte)0x98, (byte)0xbe, (byte)0x20, // [晴れ], U+E63E
    };
    String originalMessage = new String(bytes, ENCODING_UTF8);
    byte[] decodedMessageBytes = new URLCodec().decode(originalMessage.getBytes(ENCODING_MS932));
    String decodedMessage = new String(decodedMessageBytes, ENCODING_MS932);
    // decodedMessage は "? 野 家 [晴れ] " となる

参考: