2011-08-06 10 views
1

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

答えて

0

how they do it in Python 残念ながら、それはそれは3つのまたは4バイト長の文字の一部であるため、見つけることが難しいことができますが、彼らは唯一、単一の位置でリードバイトを検出すると間違っているようです:(

またその方法唯一のいくつかの選択のエンコーディング、says documentation on IsDBCSLeadByteExのために働く。そしてthis article explains why、しかし、人生はどんな楽にしません。

1

あなたはWikipedia entry on UTF8で見てみる場合は、マルチバイト構成の可能なタイプを示し便利な表があります。キーUTF8のものは、最初のバイトはすべて1組のビットパターンに従うということですle followバイトはすべて別のビットパターンに従います。特に、すべての後続バイトはビットパターン10xxxxxxを有する。

10xxxxxxに一致しないバイトが見つかるまで、文字列の最後から後方にスキャンすることで適切なブレークポイントを見つけることができます。そのバイトが0xxxxxxxであれば、そのバイトの後の文字列を終了させる(それは1バイトシーケンスなので)。そうでなければ、その前/に(マルチバイトシーケンスの開始から)文字列を終了し、 )、次の文字列の先頭に移動します。

関連する問題