ISO国コードから国旗絵文字を生成する

ISO 3166-1 alpha-2国コードからUnicodeの地域指標記号を使って国旗絵文字をプログラムで生成する方法をJavaScriptなどの言語で解説します。

Programming

詳細な説明

国旗絵文字の仕組み

国旗絵文字は単一の文字として保存されていません。ISO 3166-1 alpha-2国コードの文字に対応する2つの地域指標記号で構成されています。

Unicodeのメカニズム

Unicodeは地域指標記号をU+1F1E6(A)からU+1F1FF(Z)の範囲で定義しています。2つの地域指標記号が有効なISO 3166-1 alpha-2コードを形成すると、システムは国旗を表示します。

JavaScript実装

function getFlagEmoji(countryCode) {
  const codePoints = countryCode
    .toUpperCase()
    .split('')
    .map(char => 0x1F1E6 + char.charCodeAt(0) - 65);
  return String.fromCodePoint(...codePoints);
}

console.log(getFlagEmoji('US')); // アメリカ国旗
console.log(getFlagEmoji('JP')); // 日本国旗

Python実装

def get_flag_emoji(country_code: str) -> str:
    return ''.join(
        chr(0x1F1E6 + ord(c) - ord('A'))
        for c in country_code.upper()
    )

プラットフォームの違い

プラットフォーム 動作
iOS / macOS カラーの国旗画像として表示
Android カラーの国旗画像として表示
Windows 国旗の代わりに文字を表示(仕様)
Linux フォントに依存(Noto Color Emojiは国旗をサポート)

ユースケース

Reactアプリの国選択コンポーネントが各国名の横に国旗絵文字を表示します。コンポーネントはalpha-2コードから国旗を導出し、国旗画像アセットを配布する必要がないため、バンドルサイズが数百キロバイト削減されます。

試してみる — Country Code Reference

フルツールを開く