Winforms 使用封送和编码的字符串封送

Winforms 使用封送和编码的字符串封送,winforms,c++-cli,Winforms,C++ Cli,使用marshal_as在String^和std::String之间进行转换非常容易。然而,我还没有找到关于如何处理这样一个字符串中的编码的描述字符串^使用UTF-16,但是std::字符串呢?其中的文本可以以各种方式进行解释,如果编组将转换为应用程序本机的编码,这将非常有用 在我的例子中,所有std::string实例都包含UTF-8编码的文本。那么,我如何告诉marshal_as给我一个原始字符串的UTF-8编码变体^(反之亦然)?我同意缺少文档。如果没有适当的文件,我们是marshal_a

使用marshal_as在
String^
和std::String之间进行转换非常容易。然而,我还没有找到关于如何处理这样一个字符串中的编码的描述<代码>字符串^使用UTF-16,但是std::字符串呢?其中的文本可以以各种方式进行解释,如果编组将转换为应用程序本机的编码,这将非常有用


在我的例子中,所有
std::string
实例都包含UTF-8编码的文本。那么,我如何告诉marshal_as给我一个原始
字符串的UTF-8编码变体^
(反之亦然)?

我同意缺少文档。如果没有适当的文件,我们是
marshal_as
非常有用,但是当我有一个文档中没有回答的问题时,我会跳过它,分多个步骤进行。有些人可能对每种情况下的
marshal_as
工作原理都有一个准确的答案,但除非您将其作为注释添加到代码中,否则下一个程序员即使在查看文档后也不会想到或理解该问题

BCL非常能够转换字符。我建议使用<代码>编码< /COD>成员到<代码> GETBYECT,然后将它们复制到C或C++字符串数据结构/类。尽管需要更多的步骤,但仍然可以清楚地知道您使用的是哪些字符集和编码、如何处理不匹配、如何转移字符串所有权以及如何销毁它。(当然,在UTF-16和UTF-8之间转换时,不匹配不适用。)