【问题标题】:String marshalling with marshal_as and encodings使用 marshal_as 和编码进行字符串编组
【发布时间】:2017-09-11 00:15:22
【问题描述】:

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

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

【问题讨论】:

    标签: winforms c++-cli


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多