Emoji - tmatz/k-9 GitHub Wiki

キャリア絵文字

絵文字は docomo, au, softbank それぞれ独自の文字コードで表現されます。

K-9の処理

  • iso-2022-jp を shift_jis に変換します。

  • From: の情報から、どのキャリアの shift_jis なのかを決定します。
    x-{carrier}-shift_jis-2007

  • shift_jis から Unicode に変換します。
    このときキャリア固有の絵文字が、goomoji という Android 固有のプライベート文字コードに変換されます。
    (この変換の機能は Android が提供しています)

  • 表示
    メールのタイトルは TextView で表示します。
    キャリアスマホはフォントに goomoji のグリフをもつので絵文字が表示されます。
    素の Android だと文字化けします。
    本文は WebView で表示します。
    goomoji は <img> タグにより gif 画像に置き換えられます。
    gif 画像はK-9が持っています。docomo の絵文字がベースです。

文字化け

  • auの場合、メールサーバが各社の絵文字をauの文字コードに変換します。 docomo, au, softbank のどこから届いたメールでも、au のサーバを通ると au の文字コードになります。
    K-9 は送信者のメールアドレスのみで文字コードを決めるため、au以外の送信者のメールは絵文字が文字化けします。
    (Receivedヘッダを調べる部分が未実装)

  • goomojiに対応するフォントが無いと絵文字を表示できません。
    Nexusなどの素のAndroidだと文字化けします。 キャリアスマホはgoomojiをフォントに含むので絵文字を表示できます。

Gmailで絵文字

  • goomoji用のフォントを追加してやればGmailアプリのサブジェクトでも絵文字を表示できます。
    (要ルート化)

goomoji用フォント

作り方

  • Symbola.ttfの絵文字用のグリフをgoomojiの文字コードにコピーする。
  • 絵文字として必要のないグリフを削除する。

fontforgeはpythonのスクリプトに対応しているので変換は自動化できる。

##WebViewでフォントを指定する

⚠️ **GitHub.com Fallback** ⚠️