Daniel Stenberg (der Maintainer von curl) hat einen lesenswerten Artikel über International Domain Names (IDN) geschrieben. IDN sind Domainnamen mit Unicode code points außerhalb des ASCII-Bereiches.
Er konzentriert sich in dem Artikel auf Homoglyph-Attacken (er nennt die Homograph-Attacken, ich habe im Netz beide Schreibweisen gefunden) auf URLs. Die Idee dahinter ist, dass man in einer URL unterschiedliche Code Points benutzen kann, die gerendert ähnlich oder gleich aussehen. Eine bekannte Attacke, die von Browsern dadurch abgemildert wird, dass sie Domains mit Zeichen aus unterschiedlichen Sprachen escaped anzeigen, es also offensichtlich ist, dass man nicht auf der Seite ist, auf der man zu sein glaubt.
So weit nichts Neues. Curl hat natürlich keine solche Schutzmechanismen, und Stenberg möchte die Aufmerksamkeit darauf lenken, dass man URLs, die man mit curl aufruft, vorher noch einmal überprüft.
Für mich neu hingegen waren einige der konkreteren Szenarien. So habe ich z.B. gelernt, dass für IDN Zeichen normalisiert werden, also unterschiedliche code points auf ASCII-Zeichen übersetzt werden um die URL zu vereinheitlichen.
Dazu habe ich einige neue code points kennengelernt, deren Nutzen sich mir entzieht. So gibt es zum Beispiel zusätzlich zum regulären Schrägstrich / auch einen Schrägstrich für Brüche ⁄ (U+2044). Oder lateinische Buchstaben, die nur für römische Zahlen gedacht sind.
Letztere haben mich doch sehr verwundert. Das komische an den römischen Zahlen ist schließlich, dass sie die Buchstaben sind. Und dennoch wäre laut Unicode „MMXXIV“ nicht die korrekte Codierung von „2024“. Stattdessen wäre es „ⅯⅯⅩⅩⅣ“. Ich würde spontan behaupten, dass diese speziellen Codepoints für römische Zahlen so gut wie nie verwendet werden. Ich wusste nicht, dass es sie gibt, vermutlich weiß kaum jemand, dass es sie gibt und noch weniger Leute verwenden sie. Selbst der Wikipedia-Artikel zu römischen Zahlen benutzt einfach die ASCII-Zeichen.
Interessant ist es auch, sich den Unicode-Block anzuschauen, in dem die römischen Zahlen stehen. Dort gibt es natürlich die einzelnen Ziffern wie Ⅰ, Ⅴ, Ⅹ, usw, aber die Zahlen von 1 bis 12 haben sogar jeweils einen eigenen Code Point, auch wenn man sie als Kombination der anderen Zahlen schreiben könnte.
Ich frage mich ja, was die Geschichte dahinter ist. Ob die eingeführt wurden, um Kompatibilität zu einem anderen Zeichensatz herzustellen? Oder der Vollständigkeit halber, weil das Zahlen sind und keine Buchstaben und deswegen eigene Code Points verdient haben (ein Schlag ins Gesicht aller, die ihre Probleme mit der Han-Vereinheitlichung haben)? Jedenfalls kann doch niemand erwarten, dass diese Code Points ernsthaft verwendet werden, oder?
Update: Empfehlung des Unicode consortiums
Die Frage, wer zur Hölle denn die spezifischen code points für rmische Zahlen verwendet, hat mir keine Ruhe gelassen. Ich habe noch einmal kurz nachgeschaut. Dabei habe ich diese Stackexchange-Antwort gefunden. Die verweist auf ein Spezifikationsdokument (Abschnitt 22.3, Seite 20 im verlinkten Dokument bzw. Seite 755 in der absoluten Seitenzählung). Kurz: In den meisten Fällen sollte man einfach die ASCII-Zeichen für die rmischen Zahlen verwenden, nur in speziellen Fällen mit ostasiatischem Textlayout sollte man die spezifischen code points verwenden.