Unicode metnini ters çevirmek, birçok nedenden dolayı zordur.
İlk olarak, programlama diline bağlı olarak, dizeler bir bayt listesi, UTF-16 kod birimleri listesi (16 bit genişliğinde, API'de genellikle "karakterler" olarak adlandırılır) veya ucs4 kod noktaları olarak farklı şekillerde temsil edilir. (4 bayt genişliğinde).
İkinci olarak, farklı API'ler bu iç gösterimi farklı derecelerde yansıtır. Bazıları baytların soyutlanması, bazıları UTF-16 karakterleri, bazıları kod noktaları üzerinde çalışır. Gösterim bayt veya UTF-16 karakterleri kullandığında, genellikle API'nin bu temsilin öğelerine erişim sağlayan bölümleri ve baytlardan (UTF-8 aracılığıyla) veya baytlardan almak için gerekli mantığı gerçekleştiren bölümleri vardır. UTF-16 karakterlerini gerçek kod noktalarına.
Genellikle, API'nin bu mantığı gerçekleştiren ve böylece kod noktalarına erişmenizi sağlayan bölümleri daha sonra eklenmiştir, çünkü ilk önce 7 bit ascii vardı, sonra biraz sonra herkes farklı kod sayfaları kullanarak 8 bitin yeterli olduğunu düşündü ve hatta daha sonra 16 bit unicode için yeterliydi. Sabit bir üst sınırı olmayan tamsayı sayıları olarak kod noktaları kavramı, geçmişte, metni mantıksal olarak kodlamak için dördüncü ortak karakter uzunluğu olarak eklenmiştir.
Gerçek kod noktalarına erişmenizi sağlayan bir API kullanmak bu kadar görünüyor. Fakat...
Üçüncüsü, bir sonraki kod noktasını veya aşağıdaki kod noktalarını etkileyen çok sayıda değiştirici kod noktası vardır. Örneğin, aşağıdaki a'yı ä, e'den ë'ye & c'ye çeviren bir aksan değiştirici var. Kod noktalarını ters çevirin ve aë, farklı harflerden oluşan eä olur. Örneğin, kendi kod noktası olarak ä'nın doğrudan bir temsili vardır, ancak değiştiriciyi kullanmak da aynı derecede geçerlidir.
Dördüncüsü, her şey sürekli akış halindedir. Örnekte kullanıldığı gibi emoji arasında birçok değiştirici vardır ve her yıl yenileri eklenmektedir. Bu nedenle, bir API, bir kod noktasının bir değiştirici olup olmadığına ilişkin bilgilere erişmenizi sağlarsa, API'nin sürümü, belirli bir yeni değiştiriciyi zaten bilip bilmediğini belirleyecektir.
Unicode, yalnızca görsel görünümle ilgili olduğu zaman için bir hile sağlar:
Yazı yönü değiştiricileri var. Örnek durumunda, soldan sağa yazma yönü kullanılır. Metnin başına bir sağdan sola yazma yönü değiştiricisi ekleyin ve API / tarayıcının sürümüne bağlı olarak doğru şekilde tersine çevrilmiş görünecektir 😎
"\ u202e", sağdan sola geçersiz kılma olarak adlandırılır, sağdan sola işaretçinin en güçlü sürümüdür.
W3.org tarafından hazırlanan bu açıklamaya bakın
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>