Stroustrupの付録D(ロケールとCodecvtに特に注意)を読みました。Stroustrupは、優れたcodecvtとwidenの例(IMHO)を提供していません。私は喜びなしでインターネットからものをノブターンしようとしてきました。私はまた、文字列ストリームを吹き込むことを試みましたが、成功しませんでした。
誰かがUTF-8からUTF-16(またはUTF-32)エンコーディングに移行するためのコードを表示(および説明)できるでしょうか?注:入出力文字列のサイズは事前にわからないため、ソリューションではとを使用する必要があると思いreserve
ますback_inserter
。使用しないでくださいout.resize(in.length()*2)
。
終了したら、コードが実際に機能するのは素晴らしいことです(壊れたコードがどれだけあるかは驚くべきことです)。次の「往復」を確認してください。以下のバイトは、UTF-8およびUTF- {16|32}の「bone」の漢字です。
const std::string n("\xe9\xaa\xa8");
const std::wstring w = L"\u9aa8";
基本的な質問をお詫びします。Windowsでは、Win32 APIを使用していますが、エンコーディング間を移動するときにこれらの問題は発生しません。