Das Umkehren von Unicode-Text ist aus vielen Gründen schwierig.
Erstens werden Zeichenfolgen je nach Programmiersprache auf unterschiedliche Weise dargestellt, entweder als Liste von Bytes, als Liste von UTF-16-Codeeinheiten (16 Bit breit, in der API häufig als "Zeichen" bezeichnet) oder als ucs4-Codepunkte (4 Bytes breit).
Zweitens spiegeln verschiedene APIs diese innere Repräsentation in unterschiedlichem Maße wider. Einige arbeiten an der Abstraktion von Bytes, andere an UTF-16-Zeichen, andere an Codepunkten. Wenn die Darstellung Bytes oder UTF-16-Zeichen verwendet, gibt es normalerweise Teile der API, die Ihnen Zugriff auf die Elemente dieser Darstellung gewähren, sowie Teile, die die erforderliche Logik ausführen, um von Bytes (über UTF-8) oder von zu erhalten UTF-16-Zeichen zu den tatsächlichen Codepunkten.
Oft wurden die Teile der API, die diese Logik ausführen und Ihnen so Zugriff auf die Codepunkte gewähren, später hinzugefügt, da zuerst 7-Bit-ASCII vorhanden waren, dann etwas später alle dachten, 8-Bit wären ausreichend, wobei verschiedene Codeseiten verwendet wurden, und sogar später reichten 16 Bit für Unicode. Der Begriff der Codepunkte als Ganzzahlen ohne feste Obergrenze wurde historisch als vierte gemeinsame Zeichenlänge für die logische Codierung von Text hinzugefügt.
Die Verwendung einer API, mit der Sie auf die tatsächlichen Codepunkte zugreifen können, scheint das Richtige zu sein. Aber...
Drittens gibt es viele Modifikatorcodepunkte, die den nächsten Codepunkt oder die folgenden Codepunkte beeinflussen. Zum Beispiel gibt es einen diakritischen Modifikator, der aus einem folgenden a ein ä, e nach ë usw. macht. Drehen Sie die Codepunkte um und aë wird zu eä, bestehend aus verschiedenen Buchstaben. Es gibt eine direkte Darstellung von zB ä als eigenen Codepunkt, aber die Verwendung des Modifikators ist genauso gültig.
Viertens ist alles in ständigem Fluss. Es gibt auch viele Modifikatoren unter den Emoji, wie im Beispiel verwendet, und jedes Jahr werden weitere hinzugefügt. Wenn Sie über eine API auf die Informationen zugreifen können, ob ein Codepunkt ein Modifikator ist, bestimmt die Version der API, ob sie bereits einen bestimmten neuen Modifikator kennt.
Unicode bietet jedoch einen hackigen Trick, wenn es nur um das visuelle Erscheinungsbild geht:
Es gibt Modifikatoren für die Schreibrichtung. Im Beispiel wird die Schreibrichtung von links nach rechts verwendet. Fügen Sie am Anfang des Textes einfach einen Modifikator für die Schreibrichtung von rechts nach links hinzu. Abhängig von der Version der API / des Browsers sieht dieser korrekt umgekehrt aus 😎
'\ u202e' heißt Override von rechts nach links, es ist die stärkste Version der Markierung von rechts nach links.
Siehe diese Erklärung von w3.org
const text = 'Hello world👩🦰👩👩👦👦'
console.log('\u202e' + text)
const text = 'Hello world👩🦰👩👩👦👦'
let original = document.getElementById('original')
original.appendChild(document.createTextNode(text))
let result = document.getElementById('result')
result.appendChild(document.createTextNode('\u202e' + text))
body {
font-family: sans-serif
}
<p id="original"></p>
<p id="result"></p>