問題は、データベースに多数の文字列があり、レガシーな理由から、非語彙的な順序で格納されていることです。おそらく、文字を左から右の順序でしか格納できない文字端末ベースのアプリケーションからのものでしょう。
特殊な Unicode 文字 LRO U+202D: LEFT-TO-RIGHT OVERRIDE
を使用して、準拠アプリケーションにアラビア語の左から右への表示を強制できます。 .これにより、通常のレンダリング方法に関係なく、すべての文字が強制的に左から右にレンダリングされます。
効果は、文字列の末尾または文字 PDF U+202C POP DIRECTIONAL FORMATTING
で終了します。 .
あなたの場合、影響を受けるすべての文字列の先頭に LRO 文字を配置するだけです:
select nchar(8237) + columnName as columnNameDisplay from BadTable
プレ>数値 8237 は、16 進数の
202D
に相当する 10 進数です。 .これらの文字列を、正しく保存されている他の文字列と連結する可能性がある場合は、最後に PDF 文字も使用する必要があります:
select nchar(8237) + columnName + nchar(8236) as columnNameDisplay from BadTable
プレ>これにより、強制的な左から右へのシーケンスが終了したことがテキスト レンダリング エンジンに通知されます。
詳細については、こちらを参照してください:
注:
- 合体キャラがうまく合体しない
- テキスト読み上げソフトウェアは機能しません。おそらくアルファベット順に読み上げますが、よくわかりません。
詳細情報
文字は、表示される順序ではなく、書き込まれたり読み取られたりした順序で格納する必要があります。たとえば、文字列:
test اختبار test
プレ>として保存する必要があります
01 t 02 e 03 s 04 t 05 07 ا خ 08 09 ت 10 ب 11 ا 12 ر 13 14 t 15 e 16 s 17 t
プレ>表示されている一番左のアラビア文字が 12 の位置に格納されていることに注意してください (
substring(@var, 12, 1)
)、表示されている一番右のものは位置 7 にあります (substring(@var, 7, 1)
)。左から右に表示されている位置の文字を単純に数えると、アラビア語の部分が保存方法と比較して反転して表示されます。しかし、それはその部分が右から左に読まれるはずなので、右から左に表示されるからです。問題を解決するには、最初に確認する必要があります。