使用 marshal_as在String^
和 std::string 之间进行转换非常容易。但是,我没有找到关于如何处理这种字符串中的编码的描述。String^
使用 UTF-16 但 std::string 呢?可以以各种方式解释其中的文本,如果编组将转换为应用程序本机的编码,那将非常有用。
在我的情况下,所有std::string
实例都包含 UTF-8 编码文本。那么我将如何告诉 marshal_as 给我一个原始的 UTF-8 编码变体String^
(反之亦然)?
我同意缺少文档。如果没有适当的文档,我们只是巧合地编程。marshal_as
可能非常有用,但是当我有一个文档中没有回答的问题时,我会跳过它并分多个步骤进行。有人可能对marshal_as
每种情况下的工作原理都有一个准确的答案,但除非您将其作为注释添加到代码中,否则即使在检查文档之后,下一个程序员也不会考虑或理解这个问题。
BCL 非常有能力转换字符。我建议使用Encoding
成员GetBytes
,然后将它们复制到 C 或 C++ 字符串数据结构/类。尽管需要更多步骤,但很清楚您正在使用哪些字符集和编码、如何处理不匹配、如何转移字符串所有权以及如何销毁它。(当然,不匹配在 UTF-16 和 UTF-8 之间转换时不适用。)