ウィンドウ周りからちょっと離れて、そうだ放置していたストリームをどうにかしようと思い立ってから、けりをつけた今日で2週間。しかもこれで終わらず、あと文字コード変換、せめてデフォルトCP(日本語だとCP932≒Shift_JIS)、UTF-8/16に対応させないと話になりません、というより自分が使う気になれません。
そこで、MultiByteToWideCharの説明を見ていて思ったのが、入力文字列の不完全な部分を検出できたら良かったということです。例えば、”あいう(「え」の1バイト目)”という7バイトを与えると、6バイト変換して、余り1バイトと返してほしいです。これがファイルを読み込みつつ変換という状況なら、更に1バイト読み込み、さっきのと合わせて「え」が変換できるという具合です。実際のMultiByteToWideCharでは、1バイト余ったかどうかを教えてくれないので、別途自分で調べないといけません。
元々はファイルから数KiBずつ読み込んだバイト列を丸ごとMultiByteToWideCharに渡して、最後に上で書いたようなマルチバイト文字が係る状況に遭遇したら、そこだけうまく対処してやればと考えていましたが、これだと1文字ずつ変換したほうが良さそうな気がします。
Shift_JISが文字列先頭から見ていかないと1バイト/2バイトの区別がつけられないという点が不便ですね。ただ、それに依存したコードを書くと、今度は別の言語の文字コードで駄目だとなりそうなので、迂闊にはやれないですけど。
スポンサード リンク |
非同期ストリームの実装おつかれさまです。なかなか良さそうな実装ですね。まだ使ってませんが。私もネットワークストリームを実装しようと思っているので、参考にさせていただきます。少し改良すればそのまま使えそうな気がしないでもないですが。あと…エンコーディング欲しいですね。