utf-8ベースのエンコーディングを記述したアプリケーションがあり、これはutf-8 BMP(3バイト)をサポートしています。しかし、サロゲート・ペアをサポートする必要があるという要件があります。C++:utf8で代理文字をサポートする方法
私はutf-8でサロゲート文字がサポートされていないところを読んでいます。本当ですか?
「はい」の場合は、utf-8ではなくutf-16のデフォルトのエンコードを使用するようにアプリケーションを設定する手順は何ですか?
アプリケーション全体がutf-8を念頭に置いて書いてあり、代理文字ではないので、コードスニペットはありません。
utf-8のサロゲートペアのサポートを得るには、コード全体を変更する必要がある項目は何ですか?または、デフォルトのエンコーディングをUTF-16に変更します。
サロゲートペアは、BMPにはなく、UTF-16で保存するには大きすぎるコードポイントをエンコードする方法です。 UTF-8はこれらのコードポイントを格納するだけでよく、UTF-8で2つのコードポイントとしてエンコード(2重エンコード)されたUTF-16サロゲートペアを見たツールであれば、エラーとして扱われます。 –
@ChrisBecke:それは答えであり、コメントではありません。 –
ああ、「UTC-2で保存するには大きすぎる」ことを除いて、UTF-16は16ビットの基本ブロック(およびサロゲートペアが答え)を使用している間に最大1,000,000を超える値を保存する方法です。 –