使用marshal_as和编码进行字符串编组

时间:2013-09-19 12:24:10

标签: winforms c++-cli

使用marshal_as在String^和std :: string之间转换非常简单。但是,我没有找到如何处理这种字符串中的编码的描述。 String^使用UTF-16,但是std :: string呢?其中的文本可以通过各种方式进行解释,如果编组将转换为应用程序本机的编码,那将非常有用。

在我的情况下,所有std::string个实例都包含UTF-8编码的文本。那么我怎么告诉marshal_as给我一个原始String^的UTF-8编码变体(反之亦然)?

1 个答案:

答案 0 :(得分:3)

我同意文档缺乏。如果没有适当的文档,我们programming by coincidencemarshal_as可能非常有用但是当我有一个文档中没有回答的问题时,我只是跳过它并分多步完成。有人可能会对marshal_as在每种情况下的工作原理有一个准确的答案,但除非你把它作为注释添加到你的代码中,否则下一个程序员即使在检查了文档之后也不会想到这个问题或理解它。

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