Gepubliceerd op
  • Regional Indicator Symbols
  • RIS
  • Webtechnologie

Regional Indicator Symbols

In deze tekst duik ik in de technische aspecten van RIS-codering, een populaire categorie binnen de Emoji karakterset waarmee nationale vlaggen kunnen worden weergegeven. Let op dat niet elke browser deze symbolen even goed ondersteund, waardoor het kan zijn dat dit artikel niet goed leesbaar is!

Introductie

De RIS is een verzameling karakter-coderingen in the UTF-16 specificatie die het mogelijk maken om vlaggen van landen weer te geven in tekst. Elke vlag is samengesteld uit twee symbolen die elk een letter uit het alfabet vertegenwoordigt. Wanneer zo’n lettercombinatie een landcode uit de ISO 3166-1 alpha-21 specificatie vormt dan wordt de vlag van het betreffende land weergegeven. De tabel in Appendix A geeft alle mogelijke combinaties – en dus alle mogelijke vlaggen – weer: de RIS Codex.

RIS-Codes & ISO 3166

De samenstelling van de RIS Codex is geautomatiseerd; alle RIS-karakters worden met elkaar gecombineerd en indien van toepassing wordt de naam van het betreffende land opgezocht (te zien wanneer de RIS wordt aangewezen met de cursor). Hierdoor is het ook goed te zien dat de ISO 3166 specificatie niet altijd correct wordt geïmplementeerd én nog wel eens aan verandering onderhevig is: een aantal combinaties is wel bekend onder een naam, maar wordt niet weergegeven als vlag. Dit betreft:

  • “Pseudo-Accenten” (XA);
  • “Pseudo-Bidi” (XB);
  • “Overig Oceanië” (QO);
  • “Eurozone” (EZ); en,
  • “Onbekend Gebied” (ZZ).

Het Coderen van een Vlag: Een Voorbeeld

Om the Nederlandse vlag weer te geven moet eerst de landcode voor Nederland worden opgezocht in de ISO 3166 definitie. Met het zoekformulier van de ISO2 kan worden vastgesteld dat deze code NL is,3 geen verrassing. Om de vlag weer te geven moet deze code gecodeerd worden naar RIS-karakters; N wordt 🇳 en L wordt 🇱. Door deze twee karakters simpelweg in sequentie neer te zetten wordt de vlag weergegeven zoals verwacht: 🇳🇱.

Browserondersteuning

Het coderen van een nationale vlag kan in HTML op twee manieren worden gedaan. Het is mogelijk om rechtstreeks UTF-16 symbolen in een document te plaatsen en daarnaast kunnen de symbolen worden gecodeerd als HTML-symbolen, e.g. de vlag van de Faroe wordt samengesteld uit de RIS-codes voor F en O, oftewel 🇫 en 🇴, welke in HTML worden gecodeerd als 🇫 en 🇴 om te komen tot 🇫🇴.

Er zijn interessante verschillen tussen de manier waarop RIS-codes worden ondersteund door verschillende browsers. De individuele helften van een RIS-code kunnen bijvoorbeeld in HTML-elementen worden geplaatst zoals hier is te zien: <span>&#127477;</span><span>&#127481;</span>. In Firefox en de meeste Chromium-gebaseerde browsers wordt dit weergegeven als een vlag. Echter, op de Safari-browser van Apple worden beide RIS-codes individueel weergegeven. Wanneer er met CSS een marge wordt toegevoegd geeft Firefox de RIS-codes wél individueel weer – vergelijkbaar met Safari – terwijl browsers gebaseerd op Chromium simpelweg de marge toekennen aan de vlag als geheel.

RISify

Voor het genereren van de RIS-codex heb ik de Python package “RISify” ontwikkeld, waarmee landcodes naar RIS-codes kunnen worden geconverteerd en vice versa. RISify is beschikbaar op PyPI en kan worden geïnstalleerd met pip:

pip install RISify

Na installatie kan het als volgt worden gebruikt:

from ris import ris

# decode a country code to RIS
pt = ris("PT")

print(pt)  # 🇵🇹

# decode an HTML code to RIS
de = ris("&#127465;&#127466;")
de = de.encode("unicode")  # default

print(de)  # 🇩🇪

# encode a RIS code to uppercase ASCII
nl = ris("🇳🇱")
nl = nl.encode("ascii")
nl = nl.upper()  # default

print(nl)  # NL

# encode a RIS code to lowercase ASCII
eu = ris("🇪🇺")
eu = eu.encode("ascii")
eu = eu.lower()

print(eu)  # eu

# encode a RIS code to HTML
fo = ris("🇫🇴")
fo = fo.encode("html")

print(fo)  # &#127467;&#127476;

# concatenate RIS codes into a string
print("spam " + pt + " bacon " + de + " sausage " + nl + " eggs " + eu + " ham " + fo)
# spam 🇵🇹 bacon 🇩🇪 sausage NL eggs eu ham &#127467;&#127476;

Conclusie

RIS-codes combineren een hoop standaards en conventies die sterk onderhevig zijn aan verandering, met name op het gebied van implementatie. Daar komt nog bij dat browsers berucht zijn vanwege de verschillen in implementatie van deze standaards. Door gebruik te maken van RIS-codes op het web is er een grote kans dat er onbedoeld verschillende ervaringen worden aangeboden aan gebruiker. Alsnog kunnen RIS-codes worden gebruikt om op terug te vallen wanneer er iconen worden gebruikt (om de situatie te dekken waarin CSS niet wordt geladen) of in onderdelen van de GUI, zoals titels en knopinformatie.

Appendix

RIS Codex

De onderstaande tabel bevat alle mogelijk combinaties van RIS-coderingen en laat zien hoe deze worden weergegeven als een nationale vlag wanneer de code overeenkomt met een landcode. Wijs een vlag aan met de cursor om te lezen tot welk land de betreffende vlag toebehoord en klik op een RIS-code om het naar het klembord te kopiëren.

🇦 🇧 🇨 🇩 🇪 🇫 🇬 🇭 🇮 🇯 🇰 🇱 🇲 🇳 🇴 🇵 🇶 🇷 🇸 🇹 🇺 🇻 🇼 🇽 🇾 🇿
🇦 🇦🇦 🇧🇦 🇨🇦 🇩🇦 🇪🇦 🇫🇦 🇬🇦 🇭🇦 🇮🇦 🇯🇦 🇰🇦 🇱🇦 🇲🇦 🇳🇦 🇴🇦 🇵🇦 🇶🇦 🇷🇦 🇸🇦 🇹🇦 🇺🇦 🇻🇦 🇼🇦 🇽🇦 🇾🇦 🇿🇦
🇧 🇦🇧 🇧🇧 🇨🇧 🇩🇧 🇪🇧 🇫🇧 🇬🇧 🇭🇧 🇮🇧 🇯🇧 🇰🇧 🇱🇧 🇲🇧 🇳🇧 🇴🇧 🇵🇧 🇶🇧 🇷🇧 🇸🇧 🇹🇧 🇺🇧 🇻🇧 🇼🇧 🇽🇧 🇾🇧 🇿🇧
🇨 🇦🇨 🇧🇨 🇨🇨 🇩🇨 🇪🇨 🇫🇨 🇬🇨 🇭🇨 🇮🇨 🇯🇨 🇰🇨 🇱🇨 🇲🇨 🇳🇨 🇴🇨 🇵🇨 🇶🇨 🇷🇨 🇸🇨 🇹🇨 🇺🇨 🇻🇨 🇼🇨 🇽🇨 🇾🇨 🇿🇨
🇩 🇦🇩 🇧🇩 🇨🇩 🇩🇩 🇪🇩 🇫🇩 🇬🇩 🇭🇩 🇮🇩 🇯🇩 🇰🇩 🇱🇩 🇲🇩 🇳🇩 🇴🇩 🇵🇩 🇶🇩 🇷🇩 🇸🇩 🇹🇩 🇺🇩 🇻🇩 🇼🇩 🇽🇩 🇾🇩 🇿🇩
🇪 🇦🇪 🇧🇪 🇨🇪 🇩🇪 🇪🇪 🇫🇪 🇬🇪 🇭🇪 🇮🇪 🇯🇪 🇰🇪 🇱🇪 🇲🇪 🇳🇪 🇴🇪 🇵🇪 🇶🇪 🇷🇪 🇸🇪 🇹🇪 🇺🇪 🇻🇪 🇼🇪 🇽🇪 🇾🇪 🇿🇪
🇫 🇦🇫 🇧🇫 🇨🇫 🇩🇫 🇪🇫 🇫🇫 🇬🇫 🇭🇫 🇮🇫 🇯🇫 🇰🇫 🇱🇫 🇲🇫 🇳🇫 🇴🇫 🇵🇫 🇶🇫 🇷🇫 🇸🇫 🇹🇫 🇺🇫 🇻🇫 🇼🇫 🇽🇫 🇾🇫 🇿🇫
🇬 🇦🇬 🇧🇬 🇨🇬 🇩🇬 🇪🇬 🇫🇬 🇬🇬 🇭🇬 🇮🇬 🇯🇬 🇰🇬 🇱🇬 🇲🇬 🇳🇬 🇴🇬 🇵🇬 🇶🇬 🇷🇬 🇸🇬 🇹🇬 🇺🇬 🇻🇬 🇼🇬 🇽🇬 🇾🇬 🇿🇬
🇭 🇦🇭 🇧🇭 🇨🇭 🇩🇭 🇪🇭 🇫🇭 🇬🇭 🇭🇭 🇮🇭 🇯🇭 🇰🇭 🇱🇭 🇲🇭 🇳🇭 🇴🇭 🇵🇭 🇶🇭 🇷🇭 🇸🇭 🇹🇭 🇺🇭 🇻🇭 🇼🇭 🇽🇭 🇾🇭 🇿🇭
🇮 🇦🇮 🇧🇮 🇨🇮 🇩🇮 🇪🇮 🇫🇮 🇬🇮 🇭🇮 🇮🇮 🇯🇮 🇰🇮 🇱🇮 🇲🇮 🇳🇮 🇴🇮 🇵🇮 🇶🇮 🇷🇮 🇸🇮 🇹🇮 🇺🇮 🇻🇮 🇼🇮 🇽🇮 🇾🇮 🇿🇮
🇯 🇦🇯 🇧🇯 🇨🇯 🇩🇯 🇪🇯 🇫🇯 🇬🇯 🇭🇯 🇮🇯 🇯🇯 🇰🇯 🇱🇯 🇲🇯 🇳🇯 🇴🇯 🇵🇯 🇶🇯 🇷🇯 🇸🇯 🇹🇯 🇺🇯 🇻🇯 🇼🇯 🇽🇯 🇾🇯 🇿🇯
🇰 🇦🇰 🇧🇰 🇨🇰 🇩🇰 🇪🇰 🇫🇰 🇬🇰 🇭🇰 🇮🇰 🇯🇰 🇰🇰 🇱🇰 🇲🇰 🇳🇰 🇴🇰 🇵🇰 🇶🇰 🇷🇰 🇸🇰 🇹🇰 🇺🇰 🇻🇰 🇼🇰 🇽🇰 🇾🇰 🇿🇰
🇱 🇦🇱 🇧🇱 🇨🇱 🇩🇱 🇪🇱 🇫🇱 🇬🇱 🇭🇱 🇮🇱 🇯🇱 🇰🇱 🇱🇱 🇲🇱 🇳🇱 🇴🇱 🇵🇱 🇶🇱 🇷🇱 🇸🇱 🇹🇱 🇺🇱 🇻🇱 🇼🇱 🇽🇱 🇾🇱 🇿🇱
🇲 🇦🇲 🇧🇲 🇨🇲 🇩🇲 🇪🇲 🇫🇲 🇬🇲 🇭🇲 🇮🇲 🇯🇲 🇰🇲 🇱🇲 🇲🇲 🇳🇲 🇴🇲 🇵🇲 🇶🇲 🇷🇲 🇸🇲 🇹🇲 🇺🇲 🇻🇲 🇼🇲 🇽🇲 🇾🇲 🇿🇲
🇳 🇦🇳 🇧🇳 🇨🇳 🇩🇳 🇪🇳 🇫🇳 🇬🇳 🇭🇳 🇮🇳 🇯🇳 🇰🇳 🇱🇳 🇲🇳 🇳🇳 🇴🇳 🇵🇳 🇶🇳 🇷🇳 🇸🇳 🇹🇳 🇺🇳 🇻🇳 🇼🇳 🇽🇳 🇾🇳 🇿🇳
🇴 🇦🇴 🇧🇴 🇨🇴 🇩🇴 🇪🇴 🇫🇴 🇬🇴 🇭🇴 🇮🇴 🇯🇴 🇰🇴 🇱🇴 🇲🇴 🇳🇴 🇴🇴 🇵🇴 🇶🇴 🇷🇴 🇸🇴 🇹🇴 🇺🇴 🇻🇴 🇼🇴 🇽🇴 🇾🇴 🇿🇴
🇵 🇦🇵 🇧🇵 🇨🇵 🇩🇵 🇪🇵 🇫🇵 🇬🇵 🇭🇵 🇮🇵 🇯🇵 🇰🇵 🇱🇵 🇲🇵 🇳🇵 🇴🇵 🇵🇵 🇶🇵 🇷🇵 🇸🇵 🇹🇵 🇺🇵 🇻🇵 🇼🇵 🇽🇵 🇾🇵 🇿🇵
🇶 🇦🇶 🇧🇶 🇨🇶 🇩🇶 🇪🇶 🇫🇶 🇬🇶 🇭🇶 🇮🇶 🇯🇶 🇰🇶 🇱🇶 🇲🇶 🇳🇶 🇴🇶 🇵🇶 🇶🇶 🇷🇶 🇸🇶 🇹🇶 🇺🇶 🇻🇶 🇼🇶 🇽🇶 🇾🇶 🇿🇶
🇷 🇦🇷 🇧🇷 🇨🇷 🇩🇷 🇪🇷 🇫🇷 🇬🇷 🇭🇷 🇮🇷 🇯🇷 🇰🇷 🇱🇷 🇲🇷 🇳🇷 🇴🇷 🇵🇷 🇶🇷 🇷🇷 🇸🇷 🇹🇷 🇺🇷 🇻🇷 🇼🇷 🇽🇷 🇾🇷 🇿🇷
🇸 🇦🇸 🇧🇸 🇨🇸 🇩🇸 🇪🇸 🇫🇸 🇬🇸 🇭🇸 🇮🇸 🇯🇸 🇰🇸 🇱🇸 🇲🇸 🇳🇸 🇴🇸 🇵🇸 🇶🇸 🇷🇸 🇸🇸 🇹🇸 🇺🇸 🇻🇸 🇼🇸 🇽🇸 🇾🇸 🇿🇸
🇹 🇦🇹 🇧🇹 🇨🇹 🇩🇹 🇪🇹 🇫🇹 🇬🇹 🇭🇹 🇮🇹 🇯🇹 🇰🇹 🇱🇹 🇲🇹 🇳🇹 🇴🇹 🇵🇹 🇶🇹 🇷🇹 🇸🇹 🇹🇹 🇺🇹 🇻🇹 🇼🇹 🇽🇹 🇾🇹 🇿🇹
🇺 🇦🇺 🇧🇺 🇨🇺 🇩🇺 🇪🇺 🇫🇺 🇬🇺 🇭🇺 🇮🇺 🇯🇺 🇰🇺 🇱🇺 🇲🇺 🇳🇺 🇴🇺 🇵🇺 🇶🇺 🇷🇺 🇸🇺 🇹🇺 🇺🇺 🇻🇺 🇼🇺 🇽🇺 🇾🇺 🇿🇺
🇻 🇦🇻 🇧🇻 🇨🇻 🇩🇻 🇪🇻 🇫🇻 🇬🇻 🇭🇻 🇮🇻 🇯🇻 🇰🇻 🇱🇻 🇲🇻 🇳🇻 🇴🇻 🇵🇻 🇶🇻 🇷🇻 🇸🇻 🇹🇻 🇺🇻 🇻🇻 🇼🇻 🇽🇻 🇾🇻 🇿🇻
🇼 🇦🇼 🇧🇼 🇨🇼 🇩🇼 🇪🇼 🇫🇼 🇬🇼 🇭🇼 🇮🇼 🇯🇼 🇰🇼 🇱🇼 🇲🇼 🇳🇼 🇴🇼 🇵🇼 🇶🇼 🇷🇼 🇸🇼 🇹🇼 🇺🇼 🇻🇼 🇼🇼 🇽🇼 🇾🇼 🇿🇼
🇽 🇦🇽 🇧🇽 🇨🇽 🇩🇽 🇪🇽 🇫🇽 🇬🇽 🇭🇽 🇮🇽 🇯🇽 🇰🇽 🇱🇽 🇲🇽 🇳🇽 🇴🇽 🇵🇽 🇶🇽 🇷🇽 🇸🇽 🇹🇽 🇺🇽 🇻🇽 🇼🇽 🇽🇽 🇾🇽 🇿🇽
🇾 🇦🇾 🇧🇾 🇨🇾 🇩🇾 🇪🇾 🇫🇾 🇬🇾 🇭🇾 🇮🇾 🇯🇾 🇰🇾 🇱🇾 🇲🇾 🇳🇾 🇴🇾 🇵🇾 🇶🇾 🇷🇾 🇸🇾 🇹🇾 🇺🇾 🇻🇾 🇼🇾 🇽🇾 🇾🇾 🇿🇾
🇿 🇦🇿 🇧🇿 🇨🇿 🇩🇿 🇪🇿 🇫🇿 🇬🇿 🇭🇿 🇮🇿 🇯🇿 🇰🇿 🇱🇿 🇲🇿 🇳🇿 🇴🇿 🇵🇿 🇶🇿 🇷🇿 🇸🇿 🇹🇿 🇺🇿 🇻🇿 🇼🇿 🇽🇿 🇾🇿 🇿🇿

Deze website verzameld statistische gegevens om zo uw gebruikservaring te verbeteren.

Privacyverklaring