かもブログ

かもかも(@kam0_2)の雑記。掃き溜め。備忘録。

国旗絵文字と国別コード,そしてccTLDのお話(1)

国旗絵文字とは

f:id:two_headed_duck:20171022170334p:plain

日本の国旗絵文字.残り"138"文字になっている.

 初のブログ記事となるこの記事では,国旗(と地域)の絵文字の構造と仕組みから,そこから発展させて,南洋の島々の話まで,幅広い話を書いていきたいと思う.というわけでまずは,国旗絵文字について書いていこう.

 国旗絵文字,正確には「国と地域」の絵文字は,現在Webで使われる文字コード(*)「Unicode」で定義される絵文字だ.

*...ちょっとそれた話をすると,コンピュータは本来数字しか扱うことができない.そこで,文字を表すためには,特定の数列と文字を結びつける暗号表のような物が必要である.これを文字コードという.例えば,"A"は"65"という数値で定義される.この文字コードには種類があり,様々な言語を表現するためにさまざまな種類の文字コードがある.UnicodeUniversal Codeすなわち,世界標準の文字コードを作ろうというものである.ちなみにいわいる文字化けとは,ある文字コードで書かれた文を別の文字コードで復号しようとすると起こる現象だ.

 しかし,ここで冒頭の画像を見てほしい.僕は日本の旗絵文字を1個置いた.しかし,ツイッターの残り文字数は"138"文字となっている.140-138=2.つまり,国旗絵文字は実は1文字に見えて2文字なのである.ここで,この絵文字の横にカーソルがある時,1文字消してみよう.(著者はAndroidであり,他の環境での挙動はわからないが.)

f:id:two_headed_duck:20171022172228p:plain

”J”と言う絵文字が現れる.

 また,この時の残り文字数は"139"となる.では次に,日本国旗を2つ並べて入力し,2つの国旗が並んだ真ん中を押してカーソルを移動させ,1文字消してみよう.

f:id:two_headed_duck:20171022172607p:plain

Pという文字が現れる.勘の良い人はお気づきかと思われる.

"P"という絵文字になった.つまり,日本の国旗絵文字はJとPの絵文字が並んでできているということだ.JPといえば,"co.jp"など,日本の略称であるというのは皆さんご存知であると思う.

このJPという二文字のアルファベットで国を表すコードのことを「国別コード」といい,これは国際標準化機構(ISO)の「ISO 3166」で定義されている.(正確にはアルファベット2文字,3文字,数字の3つがそれぞれ定義されている.)

国名と国コードの対応表 - MSDN - Microsoft

https://msdn.microsoft.com/ja-jp/library/ee783931%28v=cs.10%29.aspx

このように,国別コードは国だけでなく,各自地域等にも割り当てられている.

 さて,国旗絵文字の話に戻そう.Unicodeでは国旗絵文字は以下のように表現される.J,Pなどの奇妙なアルファベット絵文字これらは「REGIONAL INDICATOR SYMBOL LETTER」(地域標識記号文字)として定義されている.つまり,これらのA~Zの絵文字は絵文字としてではなく,旗絵文字を構成するパーツとしてのみ存在するのだ.そして,この地域標識記号文字で国別コードを書くことで国旗や地域の旗が表示されるのである.

 なぜ,このような仕組みにしたのだろうか?ここからは推測だが,これは普通に考えて合理的な仕組みなのだ.現在,独立国とされる国は200近くある.これら200種類に文字コードを割り振るのは,限られた”暗号表”の枠を過剰に消費してしまう.また,国は新たに生まれ,また消えるものである.国別コード"SS"は南スーダンに割り振られている.これが独立したのは最近の話である.また,"SU"は今はなき全労働者階級の楽園こと,ソビエト連邦に割り振られていた国名コードである.

 A~Zまでは26文字しかない.26文字を2文字使えば,最大26^2=626通りの国旗が表せ,国家の興亡にも,Unicode自体を変更することなく対応できる.これを考えた人は本当に賢いと思う.

 この仕組みを理解すれば,見たことない旗の絵文字を見ても,それをコピーし,先程の実験を行い国別コードを求めることで,どこの旗か容易に判別できる.

 ちなみに,この組み合わせのアイデアは,Unicodeが多彩な絵文字を追加する方法として確立している.例えば,LGBTの虹色の旗は,「🏳️」+"ゼロ幅接合子" +「🌈」=「🏳️‍🌈」と定義されている.(環境によっては全て写っていないと思う.)ゼロ幅接合子は絵文字のボンドみたいなもので,前の絵文字と後ろの絵文字を接続する意味を持つ.地域標識記号文字は接合を前提としているが,白旗や虹は単独で使うこともある.そこで,合成を指示する”見えない絵文字”が存在している.他にも,黒旗の絵文字にドクロの絵文字を足して海賊旗なんていうユーモラスな組み合わせも多い.(さらに正確には,白旗の絵文字は2文字からなっており,1文字目に白旗「🏳」二文字めにスタイル変更を指示するEVS(Emoji Variation Sequence)が挿入されている.つまり,虹の旗は4文字文もあるのだ.)

 おっと,話がそれてしまったが,次の回ではこの国別コードと,そして,「.jp」のような国別コードトップレベルドメイン(ccTLD)について書いていきたい. 

<参考サイト>

lets-emoji.com