Unicodeテキストを逆にすることは、多くの理由で注意が必要です。
まず、プログラミング言語に応じて、文字列は、バイトのリスト、UTF-16コードユニットのリスト(16ビット幅、APIでは「文字」と呼ばれることが多い)、またはucs4コードポイントのいずれかとしてさまざまな方法で表されます。 (4バイト幅)。
次に、APIが異なれば、その内部表現がさまざまな程度で反映されます。バイトの抽象化に取り組むもの、UTF-16文字に取り組むもの、コードポイントに取り組むものがあります。表現がバイトまたはUTF-16文字を使用する場合、通常、この表現の要素へのアクセスを提供するAPIの部分と、バイトから(UTF-8を介して)またはから取得するために必要なロジックを実行する部分があります。実際のコードポイントへのUTF-16文字。
多くの場合、そのロジックを実行してコードポイントにアクセスできるようにするAPIの部分は後で追加されます。最初は、7ビットのASCIIがあり、少し後に、さまざまなコードページを使用して、8ビットで十分だと誰もが考えました。その後、ユニコードには16ビットで十分でした。固定された上限のない整数としてのコードポイントの概念は、テキストを論理的にエンコードするための4番目の一般的な文字長として歴史的に追加されました。
実際のコードポイントへのアクセスを提供するAPIを使用することは、それだけのようです。だが...
第三に、次のコードポイントまたは次のコードポイントに影響を与える修飾子コードポイントがたくさんあります。たとえば、次のaをä、eからë、&cに変換するdiacritic修飾子があります。コードポイントを逆にすると、aëは異なる文字で作られたeäになります。独自のコードポイントとしてたとえばäの直接表現がありますが、修飾子を使用することも同様に有効です。
第四に、すべてが絶え間なく変化しています。例で使用されているように、絵文字には多くの修飾子もあり、毎年追加されます。したがって、APIがコードポイントが修飾子であるかどうかの情報へのアクセスを提供する場合、APIのバージョンは、特定の新しい修飾子をすでに知っているかどうかを判断します。
ただし、Unicodeは、見た目だけが重要な場合に、ハッキーなトリックを提供します。
書き込み方向修飾子があります。この例の場合、左から右への書き込み方向が使用されます。テキストの先頭に右から左への書き込み方向修飾子を追加するだけで、API /ブラウザーのバージョンによっては、正しく反転して表示されます😎
「\ u202e」は右から左へのオーバーライドと呼ばれ、右から左へのマーカーの最強バージョンです。
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>