1

MultiByteToWideCharを使用して、UTF-8でエンコードされたストリームをワイド文字に変換しています。不完全な文字と変換バッファの終わりがある場合、この関数はそれを「?」に置き換えます。サイン。次のバッファに追加される不完全な文字を検出するには、どのようなチェック/設定を実装する必要がありますか?

4

2 に答える 2

1

UTF8 に関するウィキペディアのエントリを見ると、マルチバイト構成の可能なタイプを示す便利な表があります。UTF8 で重要なことは、最初のバイトはすべて 1 セットのビット パターンに従い、後続のバイトはすべて別のビット パターンに従うことです。特に、後続のすべてのバイトのビット パターンは 10xxxxxx です。

10xxxxxx と一致しないバイトが見つかるまで、文字列の末尾から逆方向にスキャンすることで、適切なブレーク ポイントを見つけることができるようです。そのバイトが 0xxxxxxx の場合は、そのバイトの後に文字列を終了し (シングルバイト シーケンスであるため)、そうでない場合はその位置/前で文字列を終了し (マルチバイト シーケンスの開始であるため)、バイトを追加します。 ) その後、次の文字列の先頭まで。

于 2011-08-07T06:19:21.193 に答える
0

Python での方法 残念ながら、先頭のバイトを 1 つの位置でしか検出しないため、これは間違っているようですが、3 バイトまたは 4 バイトの長さの文字の一部である可能性があるため、見つけるのが難しくなります :(

さらに、その方法は、選択されたいくつかのエンコーディングに対してのみ機能します、と IsDBCSLeadByteEx のドキュメントは述べていますこの記事ではその理由を説明していますが、生活が楽になるわけではありません。

于 2011-08-06T12:17:30.910 に答える