4

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

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

4

1 回答 1

3

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

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

于 2013-09-20T03:12:22.377 回答