HTMLのNumeric character references
HTMLには,文字をコードポイントで表す数値文字参照(numeric character references)がある.昨日の飲み会で,Tさんから,NTT DoCoMoの絵文字(ここですでにピンとくる人がいるだろう(苦笑))を数値実体参照で記述すると,あるプロダクトではUTF-8シーケンス中にShift-JISのコードポイントとして挿入されてしまうという話を聞いた.それはひどいバグだから忘れないうちにと,酔っていたにもかかわらず(笑)さっそく問題をその会社にメールしておいた.
それで,今日酔いが醒めた頭で冷静に問題を整理してみた.まず,NTT DoCoMoの定義は次の通り.
- 形式は以下のとおりです。(末尾のセミコロンは省略不可です。)
*****;(*****:絵文字に対応するShift-JISコードを10進数で表したもの)
- 形式は以下のとおりです。(末尾のセミコロンは省略不可です。)
****; (****:絵文字に対応するUnicodeコードを16進数で表したもの)
http://www.nttdocomo.co.jp/p_s/imode/tag/emoji/e1.html#2
これに対してHTML 4.01の定義は次の通り.
- The syntax "D;", where D is a decimal number, refers to the ISO 10646 decimal character number D.
- The syntax "H;" or "H;", where H is a hexadecimal number, refers to the ISO 10646 hexadecimal character number H. Hexadecimal numbers in numeric character references are case-insensitive.
http://www.w3.org/TR/REC-html40/charset.html#h-5.3.1
げげっ,これって単にNTT DoCoMoが非互換な実装をしているだけじゃない!一応「推奨しません」と書いてあるのだが,その理由はこれか(苦笑)
実は,iモード対応絵文字のドキュメントには,他にも非標準なのに標準のように書いてあるところとか,じっと見ていると浮かび上がるダークな世界(謎…とても私の口からは言えません)があるので,暇な人は探してみると面白いかもしれない.