4

Converting between String^ and std::string is very easy using marshal_as. However, I have nowhere found a description of how encodings in such a string are handled. String^ uses UTF-16 but what about std::string? Text in that can be interpreted in various ways and it would be very usefull if the marshalling would convert to an encoding that is native to your application.

In my case all std::string instances contain UTF-8 encoded text. So how would I tell marshal_as to give me an UTF-8 encoded variant of the original String^ (and vice versa)?

4

1 に答える 1

3

ドキュメントが不足していることに同意します。適切なドキュメンテーションがなければ、私たちは偶然にプログラミングしています。marshal_as非常に便利な場合がありますが、ドキュメントで回答されていない質問がある場合は、スキップして複数の手順で実行します. それぞれのケースでどのように機能するかについて正確な答えを誰かが持っているかもしれませんが、marshal_asそれをコードにコメントとして追加しない限り、ドキュメントを確認した後でも、次のプログラマーは問題を考えたり理解したりすることはありません。

BCL は、文字を変換する機能が非常に優れています。Encodingメンバーを使用GetBytesして、C または C++ 文字列データ構造/クラスにコピーすることをお勧めします。より多くの手順が必要ですが、使用している文字セットとエンコーディング、不一致の処理方法、文字列の所有権の譲渡方法、破棄方法が明確になります。(もちろん、UTF-16 と UTF-8 の間の変換では不一致は適用されません。)

于 2013-09-20T03:12:22.377 に答える