Odwracanie tekstu Unicode jest trudne z wielu powodów.
Po pierwsze, w zależności od języka programowania, łańcuchy są reprezentowane na różne sposoby, albo jako lista bajtów, lista jednostek kodu UTF-16 (szerokość 16 bitów, często nazywane „znakami” w API) lub jako punkty kodowe ucs4 (Szerokość 4 bajty).
Po drugie, różne interfejsy API odzwierciedlają tę wewnętrzną reprezentację w różnym stopniu. Niektórzy pracują nad abstrakcją bajtów, inni na znakach UTF-16, inni na punktach kodowych. Gdy reprezentacja używa bajtów lub znaków UTF-16, zwykle istnieją części interfejsu API, które zapewniają dostęp do elementów tej reprezentacji, a także części, które wykonują niezbędną logikę, aby uzyskać z bajtów (przez UTF-8) lub z UTF-16 znaków do rzeczywistych punktów kodowych.
Często części API wykonujące tę logikę, a tym samym dające dostęp do punktów kodowych, były dodawane później, ponieważ najpierw było 7-bitowe ascii, a nieco później wszyscy myśleli, że wystarczy 8 bitów, używając różnych stron kodowych, a nawet później, że 16 bitów wystarczyło dla Unicode. Pojęcie punktów kodowych jako liczb całkowitych bez ustalonej górnej granicy było historycznie dodawane jako czwarta wspólna długość znaku do logicznego kodowania tekstu.
Korzystanie z interfejsu API, który zapewnia dostęp do rzeczywistych punktów kodowych, wydaje się być tym. Ale...
Po trzecie, istnieje wiele modyfikatorów punktów kodowych wpływających na następny punkt kodowy lub kolejne punkty kodowe. Np. Istnieje modyfikator diakrytyczny zamieniający następujące po a w ä, e na ë i c. Obróć punkty kodowe, a aë stanie się eä, złożone z różnych liter. Istnieje bezpośrednia reprezentacja np. Ä jako własnego punktu kodowego, ale użycie modyfikatora jest równie ważne.
Po czwarte, wszystko jest w ciągłym ruchu. Wśród emoji jest również wiele modyfikatorów, jak użyto w przykładzie, a co roku jest ich więcej. Dlatego jeśli interfejs API zapewnia dostęp do informacji, czy punkt kodowy jest modyfikatorem, wersja interfejsu API określi, czy zna już określony nowy modyfikator.
Unicode zapewnia jednak sprytną sztuczkę, gdy chodzi tylko o wygląd:
Istnieją modyfikatory kierunku pisania. W przykładzie zastosowano kierunek pisania od lewej do prawej. Po prostu dodaj modyfikator kierunku pisania od prawej do lewej na początku tekstu iw zależności od wersji API / przeglądarki będzie wyglądał poprawnie odwrócony 😎
„\ u202e” nazywa się przesłonięciem od prawej do lewej, jest to najsilniejsza wersja znacznika od prawej do lewej.
Zobacz to wyjaśnienie 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>