2010/08/08
携帯の絵文字
引き続き携帯ネタ。
携帯の絵文字って各社バラバラで携帯サイトで使おうと
すると結構めんどくさいらしい。
じゃあライブラリにまとめて見ようって事でやってみました。
とりあえずググって見たところちゃんと整理しているページがありました。
http://trialgoods.com/emoji/?career=consi&page=3
これをベースに変換テーブルを作ります。
KEITAI.EMOJI = {
'晴':{DoCoMo:'', AU:'', SoftBank:'\x1b$Gj\x0f'},
'曇':{DoCoMo:'', AU:'', SoftBank:'\x1b$Gi\x0f'},
'雨':{DoCoMo:'', AU:'', SoftBank:'\x1b$Gk\x0f'},
'雪':{DoCoMo:'', AU:'', SoftBank:'\x1b$Gh\x0f'},
'雷':{DoCoMo:'', AU:'', SoftBank:'\x1b$E]\x0f'},
'台風':{DoCoMo:'', AU:'', SoftBank:'\x1b$Pc\x0f'},
'傘':{DoCoMo:'', AU:'', SoftBank:'\x1b$P\\\x0f'},
'牡羊座':{DoCoMo:'', AU:'', SoftBank:'\x1b$F_\x0f'},
'牡牛座':{DoCoMo:'', AU:'', SoftBank:'\x1b$F`\x0f'},
'双子座':{DoCoMo:'', AU:'', SoftBank:'\x1b$Fa\x0f'},
'蟹座':{DoCoMo:'', AU:'', SoftBank:'\x1b$Fb\x0f'},
'獅子座':{DoCoMo:'', AU:'', SoftBank:'\x1b$Fc\x0f'},
'乙女座':{DoCoMo:'', AU:'', SoftBank:'\x1b$Fd\x0f'},
'天秤座':{DoCoMo:'', AU:'', SoftBank:'\x1b$Fe\x0f'},
'蠍座':{DoCoMo:'', AU:'', SoftBank:'\x1b$Ff\x0f'},
'射手座':{DoCoMo:'', AU:'', SoftBank:'\x1b$Fg\x0f'},
'山羊座':{DoCoMo:'', AU:'', SoftBank:'\x1b$Fh\x0f'},
'水瓶座':{DoCoMo:'', AU:'', SoftBank:'\x1b$Fi\x0f'},
'魚座':{DoCoMo:'', AU:'', SoftBank:'\x1b$Fj\x0f'},
'野球':{DoCoMo:'', AU:'', SoftBank:'\x1b$G6\x0f'},
'ゴルフ':{DoCoMo:'', AU:'', SoftBank:'\x1b$G4\x0f'},
'テニス':{DoCoMo:'', AU:'', SoftBank:'\x1b$G5\x0f'},
'サッカー':{DoCoMo:'', AU:'', SoftBank:'\x1b$G8\x0f'},
'スキー':{DoCoMo:'', AU:'', SoftBank:'\x1b$G3\x0f'},
'バスケ':{DoCoMo:'', AU:'', SoftBank:'\x1b$PJ\x0f'},
'ゴール':{DoCoMo:'', AU:'', SoftBank:'\x1b$ER\x0f'},
'電車':{DoCoMo:'', AU:'', SoftBank:'\x1b$G>\x0f'},
'地下鉄':{DoCoMo:'', AU:'', SoftBank:'\x1b$PT\x0f'},
'車':{DoCoMo:'', AU:'', SoftBank:'\x1b$G;\x0f'},
'バス':{DoCoMo:'', AU:'', SoftBank:'\x1b$Ey\x0f'},
'船':{DoCoMo:'', AU:'', SoftBank:'\x1b$F"\x0f'},
'飛行機':{DoCoMo:'', AU:'', SoftBank:'\x1b$G=\x0f'},
'家':{DoCoMo:'', AU:'', SoftBank:'\x1b$GV\x0f'},
'ビル':{DoCoMo:'', AU:'', SoftBank:'\x1b$GX\x0f'},
'郵便局':{DoCoMo:'', AU:'', SoftBank:'\x1b$Es\x0f'},
'病院':{DoCoMo:'', AU:'', SoftBank:'\x1b$Eu\x0f'},
'銀行':{DoCoMo:'', AU:'', SoftBank:'\x1b$Em\x0f'},
'ATM':{DoCoMo:'', AU:'', SoftBank:'\x1b$Et\x0f'},
'ホテル':{DoCoMo:'', AU:'', SoftBank:'\x1b$Ex\x0f'},
'コンビニ':{DoCoMo:'', AU:'', SoftBank:'\x1b$Ev\x0f'},
'GS':{DoCoMo:'', AU:'', SoftBank:'\x1b$GZ\x0f'},
'駐車場':{DoCoMo:'', AU:'', SoftBank:'\x1b$Eo\x0f'},
'信号':{DoCoMo:'', AU:'', SoftBank:'\x1b$En\x0f'},
'トイレ':{DoCoMo:'', AU:'', SoftBank:'\x1b$Eq\x0f'},
'レストラン':{DoCoMo:'', AU:'', SoftBank:'\x1b$Gc\x0f'},
'コーヒー':{DoCoMo:'', AU:'', SoftBank:'\x1b$Ge\x0f'},
'カクテル':{DoCoMo:'', AU:'', SoftBank:'\x1b$Gd\x0f'},
'ビール':{DoCoMo:'', AU:'', SoftBank:'\x1b$Gg\x0f'},
'ハンバーガー':{DoCoMo:'', AU:'', SoftBank:'\x1b$E@\x0f'},
'ハイヒール':{DoCoMo:'', AU:'', SoftBank:'\x1b$E^\x0f'},
'はさみ':{DoCoMo:'', AU:'', SoftBank:'\x1b$O3\x0f'},
'マイク':{DoCoMo:'', AU:'', SoftBank:'\x1b$G\\\x0f'},
'ビデオカメラ':{DoCoMo:'', AU:'', SoftBank:'\x1b$G]\x0f'},
'右斜め上':{DoCoMo:'', AU:'', SoftBank:'\x1b$FV\x0f'},
'ヘッドフォン':{DoCoMo:'', AU:'', SoftBank:'\x1b$O*\x0f'},
'アート':{DoCoMo:'', AU:'', SoftBank:'\x1b$Q"\x0f'},
'演劇':{DoCoMo:'', AU:'', SoftBank:'\x1b$Q#\x0f'},
'チケット':{DoCoMo:'', AU:'', SoftBank:'\x1b$EE\x0f'},
'喫煙':{DoCoMo:'', AU:'', SoftBank:'\x1b$O.\x0f'},
'禁煙':{DoCoMo:'', AU:'', SoftBank:'\x1b$F(\x0f'},
'カメラ':{DoCoMo:'', AU:'', SoftBank:'\x1b$G(\x0f'},
'カバン':{DoCoMo:'', AU:'', SoftBank:'\x1b$OC\x0f'},
'本':{DoCoMo:'', AU:'', SoftBank:'\x1b$Eh\x0f'},
'リボン':{DoCoMo:'', AU:'', SoftBank:'\x1b$O4\x0f'},
'プレゼント':{DoCoMo:'', AU:'', SoftBank:'\x1b$E2\x0f'},
'バースデー':{DoCoMo:'', AU:'', SoftBank:'\x1b$Ok\x0f'},
'電話':{DoCoMo:'', AU:'', SoftBank:'\x1b$G)\x0f'},
'携帯電話':{DoCoMo:'', AU:'', SoftBank:'\x1b$G*\x0f'},
'メモ':{DoCoMo:'', AU:'', SoftBank:'\x1b$O!\x0f'},
'TV':{DoCoMo:'', AU:'', SoftBank:'\x1b$EJ\x0f'},
'CD':{DoCoMo:'', AU:'', SoftBank:'\x1b$EF\x0f'},
'ハート':{DoCoMo:'', AU:'', SoftBank:'\x1b$F,\x0f'},
'スペード':{DoCoMo:'', AU:'', SoftBank:'\x1b$F.\x0f'},
'ダイヤ':{DoCoMo:'', AU:'', SoftBank:'\x1b$F-\x0f'},
'クラブ':{DoCoMo:'', AU:'', SoftBank:'\x1b$F/\x0f'},
'目':{DoCoMo:'', AU:'', SoftBank:'\x1b$P9\x0f'},
'耳':{DoCoMo:'', AU:'', SoftBank:'\x1b$P;\x0f'},
'グー':{DoCoMo:'', AU:'', SoftBank:'\x1b$G0\x0f'},
'チョキ':{DoCoMo:'', AU:'', SoftBank:'\x1b$G1\x0f'},
'パー':{DoCoMo:'', AU:'', SoftBank:'\x1b$G2\x0f'},
'右斜め下':{DoCoMo:'', AU:'', SoftBank:'\x1b$FX\x0f'},
'左斜め上':{DoCoMo:'', AU:'', SoftBank:'\x1b$FW\x0f'},
'足':{DoCoMo:'', AU:'', SoftBank:'\x1b$QV\x0f'},
'車椅子':{DoCoMo:'', AU:'', SoftBank:'\x1b$F*\x0f'},
'三日月':{DoCoMo:'弄', AU:'', SoftBank:'\x1b$Gl\x0f'},
'犬':{DoCoMo:'聾', AU:'', SoftBank:'\x1b$Gr\x0f'},
'猫':{DoCoMo:'牢', AU:'', SoftBank:'\x1b$Go\x0f'},
'ヨット':{DoCoMo:'磊', AU:'', SoftBank:'\x1b$G<\x0f'},
'クリスマス':{DoCoMo:'賂', AU:'', SoftBank:'\x1b$GS\x0f'},
'左斜め下':{DoCoMo:'雷', AU:'', SoftBank:'\x1b$FY\x0f'},
'携帯へ':{DoCoMo:'沈', AU:'', SoftBank:'\x1b$E$\x0f'},
'メールへ':{DoCoMo:'拾', AU:'', SoftBank:'\x1b$E#\x0f'},
'FAXへ':{DoCoMo:'若', AU:'', SoftBank:'\x1b$G+\x0f'},
'ID':{DoCoMo:'良', AU:'', SoftBank:'\x1b$FI\x0f'},
'鍵':{DoCoMo:'諒', AU:'', SoftBank:'\x1b$G_\x0f'},
'虫眼鏡':{DoCoMo:'女', AU:'', SoftBank:'\x1b$E4\x0f'},
'NEW':{DoCoMo:'廬', AU:'', SoftBank:'\x1b$F2\x0f'},
'#':{DoCoMo:'礪', AU:'', SoftBank:'\x1b$F0\x0f'},
'1':{DoCoMo:'驪', AU:'', SoftBank:'\x1b$F<\x0f'},
'2':{DoCoMo:'麗', AU:'', SoftBank:'\x1b$F=\x0f'},
'3':{DoCoMo:'黎', AU:'', SoftBank:'\x1b$F>\x0f'},
'4':{DoCoMo:'力', AU:'', SoftBank:'\x1b$F?\x0f'},
'5':{DoCoMo:'曆', AU:'', SoftBank:'\x1b$F@\x0f'},
'6':{DoCoMo:'歷', AU:'', SoftBank:'\x1b$FA\x0f'},
'7':{DoCoMo:'轢', AU:'', SoftBank:'\x1b$FB\x0f'},
'8':{DoCoMo:'年', AU:'', SoftBank:'\x1b$FC\x0f'},
'9':{DoCoMo:'憐', AU:'', SoftBank:'\x1b$FD\x0f'},
'0':{DoCoMo:'戀', AU:'', SoftBank:'\x1b$FE\x0f'},
'OK':{DoCoMo:'聆', AU:'', SoftBank:'\x1b$Fm\x0f'},
'ハート1':{DoCoMo:'撚', AU:'', SoftBank:'\x1b$GB\x0f'},
'ハート2':{DoCoMo:'煉', AU:'', SoftBank:'\x1b$GC\x0f'},
'嬉顔':{DoCoMo:'秊', AU:'', SoftBank:'\x1b$Gw\x0f'},
'怒顔':{DoCoMo:'練', AU:'', SoftBank:'\x1b$Gy\x0f'},
'悲顔':{DoCoMo:'輦', AU:'', SoftBank:"\x1b$P'\x0f"},
'音符':{DoCoMo:'鍊', AU:'', SoftBank:'\x1b$G^\x0f'},
'温泉':{DoCoMo:'列', AU:'', SoftBank:'\x1b$EC\x0f'},
'キスマーク':{DoCoMo:'咽', AU:'', SoftBank:'\x1b$G#\x0f'},
'キラキラ':{DoCoMo:'烈', AU:'', SoftBank:'\x1b$ON\x0f'},
'電球':{DoCoMo:'裂', AU:'', SoftBank:'\x1b$E/\x0f'},
'怒り':{DoCoMo:'說', AU:'', SoftBank:'\x1b$OT\x0f'},
'パンチ':{DoCoMo:'廉', AU:'', SoftBank:'\x1b$G-\x0f'},
'爆弾':{DoCoMo:'念', AU:'', SoftBank:'\x1b$O1\x0f'},
'連音符':{DoCoMo:'捻', AU:'', SoftBank:'\x1b$OF\x0f'},
'睡眠':{DoCoMo:'簾', AU:'', SoftBank:'\x1b$E\\\x0f'},
'!':{DoCoMo:'獵', AU:'', SoftBank:'\x1b$GA\x0f'},
'汗':{DoCoMo:'嶺', AU:'', SoftBank:'\x1b$OQ\x0f'},
'ダッシュ':{DoCoMo:'玲', AU:'', SoftBank:'\x1b$OP\x0f'},
'カチンコ':{DoCoMo:'縷', AU:'', SoftBank:'\x1b$OD\x0f'},
'夜':{DoCoMo:'綾', AU:'', SoftBank:'\x1b$Pk\x0f'},
'シャツ':{DoCoMo:'靈', AU:'', SoftBank:'\x1b$G&\x0f'},
'口紅':{DoCoMo:'例', AU:'', SoftBank:'\x1b$O<\x0f'},
'ベル':{DoCoMo:'隸', AU:'', SoftBank:'\x1b$OE\x0f'},
'ドル袋':{DoCoMo:'了', AU:'', SoftBank:'\x1b$EO\x0f'},
'パソコン':{DoCoMo:'僚', AU:'', SoftBank:'\x1b$G,\x0f'},
'王冠':{DoCoMo:'樂', AU:'', SoftBank:'\x1b$E.\x0f'},
'指輪':{DoCoMo:'燎', AU:'', SoftBank:'\x1b$GT\x0f'},
'自転車':{DoCoMo:'蓼', AU:'', SoftBank:'\x1b$EV\x0f'},
'お茶':{DoCoMo:'遼', AU:'', SoftBank:'\x1b$OX\x0f'},
'照顔':{DoCoMo:'阮', AU:'', SoftBank:'\x1b$P*\x0f'},
'汗顔':{DoCoMo:'杻', AU:'', SoftBank:'\x1b$E(\x0f'},
'小怒顔':{DoCoMo:'柳', AU:'', SoftBank:'\x1b$P6\x0f'},
'しらけ顔':{DoCoMo:'流', AU:'', SoftBank:'\x1b$P.\x0f'},
'ラブラブ顔':{DoCoMo:'溜', AU:'', SoftBank:'\x1b$E&\x0f'},
'GJ':{DoCoMo:'琉', AU:'', SoftBank:'\x1b$G.\x0f'},
'あかんべ顔':{DoCoMo:'留', AU:'', SoftBank:'\x1b$E%\x0f'},
'ウィンク顔':{DoCoMo:'硫', AU:'', SoftBank:'\x1b$P%\x0f'},
'失敗顔':{DoCoMo:'類', AU:'', SoftBank:'\x1b$P&\x0f'},
'含笑顔':{DoCoMo:'六', AU:'', SoftBank:'\x1b$P"\x0f'},
'泣顔':{DoCoMo:'戮', AU:'', SoftBank:'\x1b$P1\x0f'},
'(C)':{DoCoMo:'淪', AU:'', SoftBank:'\x1b$Fn\x0f'},
'TM':{DoCoMo:'輪', AU:'', SoftBank:'\x1b$QW\x0f'},
'走る':{DoCoMo:'律', AU:'', SoftBank:'\x1b$E5\x0f'},
'マル秘':{DoCoMo:'慄', AU:'', SoftBank:'\x1b$O5\x0f'},
'(R)':{DoCoMo:'率', AU:'', SoftBank:'\x1b$Fo\x0f'},
'警告':{DoCoMo:'隆', AU:'', SoftBank:'\x1b$Fr\x0f'},
'空席':{DoCoMo:'吏', AU:'', SoftBank:'\x1b$FK\x0f'},
'満席':{DoCoMo:'易', AU:'', SoftBank:'\x1b$FJ\x0f'},
'学校':{DoCoMo:'泥', AU:'', SoftBank:'\x1b$Ew\x0f'},
'波':{DoCoMo:'理', AU:'', SoftBank:'\x1b$P^\x0f'},
'富士山':{DoCoMo:'痢', AU:'', SoftBank:'\x1b$G[\x0f'},
'クローバー':{DoCoMo:'罹', AU:'', SoftBank:'\x1b$E0\x0f'},
'チューリップ':{DoCoMo:'裡', AU:'', SoftBank:'\x1b$O$\x0f'},
'りんご':{DoCoMo:'離', AU:'', SoftBank:'\x1b$Oe\x0f'},
'もみじ':{DoCoMo:'溺', AU:'', SoftBank:'\x1b$E8\x0f'},
'桜':{DoCoMo:'吝', AU:'', SoftBank:'\x1b$GP\x0f'},
'おにぎり':{DoCoMo:'燐', AU:'', SoftBank:'\x1b$Ob\x0f'},
'ケーキ':{DoCoMo:'璘', AU:'', SoftBank:'\x1b$Gf\x0f'},
'日本酒':{DoCoMo:'藺', AU:'', SoftBank:'\x1b$O+\x0f'},
'ラーメン':{DoCoMo:'隣', AU:'', SoftBank:'\x1b$O`\x0f'},
'パン':{DoCoMo:'鱗', AU:'', SoftBank:'\x1b$OY\x0f'},
'ひよこ':{DoCoMo:'林', AU:'', SoftBank:'\x1b$QC\x0f'},
'ペンギン':{DoCoMo:'淋', AU:'', SoftBank:'\x1b$Gu\x0f'},
'ウマ':{DoCoMo:'粒', AU:'', SoftBank:'\x1b$G:\x0f'},
'ブタ':{DoCoMo:'狀', AU:'', SoftBank:'\x1b$E+\x0f'},
};
174個、結構な数です。
ついでにキャリア判定と変換関数も作ります。
KEITAI.DOCOMO = "DoCoMo";
KEITAI.SOFTBANK = "SoftBank";
KEITAI.AU = "AU";
KEITAI.getCarrier = function(req) {
var ua = req.getHeader("User-Agent");
if (ua.match(/^DoCoMo/)) {
return this.DOCOMO;
} else if (ua.match(/^J-PHONE|^Vodafone|^SoftBank/)){
return this.SOFTBANK;
} else if (ua.match(/^UP.Browser|^KDDI/)){
return this.AU;
}
return "AU";
}
KEITAI.emojiPass1 = function(carrier, xhtml) {
var emojis = xhtml..emoji;
for each (var node in emojis) {
var codes = this.EMOJI[node.text()];
if (codes != null) {
node.parent().insertChildAfter(node, codes[carrier]);
delete node.(true)[0];
}
}
return xhtml;
}
KEITAI.emojiPass2 = function(carrier, xhtml) {
var str = xhtml.toString();
if (carrier == KEITAI.DOCOMO) {
str = str.replace(/[&]amp;/g, "&");
} else if (carrier == KEITAI.SOFTBANK) {
str = str.replace(/[&]#27;/g, "\x1b").replace(/[&]#15;/g, "\x0f");
} else if (carrier == KEITAI.AU) {
str = str.replace(/[&]amp;/g, "&");
}
return str;
}
で、準備OKなので表示をするサンプルコードを書きます。
include("keitai.js");
function doGet(req, res) {
var userName = __ENV__.user.name; // ログインユーザ名
var html =
晴
曇
雨
...中略...
ペンギン
ウマ
ブタ
;
var carrier = KEITAI.getCarrier(req);
res.setContentType("text/html; charset=Shift_JIS");
var str = KEITAI.emojiPass2(carrier,KEITAI.emojiPass1(carrier,html));
res.writer.write(str);
}
エミュレータの結果。
AU:
DoCoMo:
SoftBank:
あれ、SoftBank 壊れてる。
次回へ続く。



この投稿へのコメント

コメント・フォーム