1

私の質問はデータベース (特に SQL Server) に関するものです。公式ガイドでは、「NVARCHAR/NCHAR」を使用する場合、「1 文字あたり 2 バイトのストレージ」が使用され、「サロゲート ペアが必要な場合は、文字には 4 バイトのストレージが必要です。」サロゲート ペアが必要な場合、4 バイトはどのように使用されますか? その「必要性」はどのように SQL Server に伝達され、どのように認識されるのでしょうか? これがどのように機能するかはわかりません-プログラミングをしていたとき、何かをUTF-8、16、または32として定義していました.SQL ServerはUTF-16のみを受け入れるようで、どういうわけか使用します必要に応じてサロゲートペア。誰かが私にこれがどのように機能するのか説明してもらえますか? また、ソースと参考文献を本当に感謝しています。

サロゲートペアについて読んでみましたが、表面に触れて「サロゲートペアは2つのUTF-16を使用してUTF-32文字を表現するためのメカニズムにすぎない」と説明するいくつかのソースを除いて、文字通り何もありません。

ありがとうございました。長い質問で申し訳ありません。

4

1 に答える 1

1

わかりました。場合によっては、独自の調査を行って答えを見つけるのが最善の方法です (ただし、それには何日も何時間もかかる場合があります)。とにかく、私は私の質問に対する答えを見つけました。

簡単に言うと、UTF-16 の前身である UCS-2 は FIXED-LENGTH エンコーディングでした。これは、UCS=-2 のすべての文字が正確に 2 バイトを占めることを意味します。UTF-16 は、対照的に可変長エンコーディングである UCS-2 の後に導入されました。つまり、UTF-16 では、サロゲート ペアリングにより、16 ビットではなく 32 ビットを使用する文字を定義できるようになります。これはどのように行われるのでしょうか? ペアリング用に予約されている UTF-16 エンコーディングの範囲が存在します。これは、この範囲 (たまたま 1024 スポット) を使用するエンコードは、自動的にペアを待っていると想定されることを意味します。

そのため、この時点で、「USC-2 エンコーディングを使用していて、プログラムがその禁止範囲内の文字を認識したらどうなるか」と尋ねることができます。答えは単純に「何もない」です。その範囲は UCS-2 では定義されておらず、実際にはそれが UTF-16 と UCS の唯一の違いです。UCS にバインドされたプログラムは、UTF-16 固有の文字を認識しません。

于 2015-03-04T19:10:12.677 に答える