【问题标题】:how to extract a unicode string with boost.python如何使用 boost.python 提取 unicode 字符串
【发布时间】:2011-10-01 03:34:15
【问题描述】:

好像我做extract<const char*>("a unicode string")时代码会崩溃

有人知道怎么解决吗?

【问题讨论】:

  • 没有明确的答案,但herehere 我发现了一些您可能感兴趣的参考资料
  • 这是您遇到的错误吗? “TypeError:没有注册的转换器能够从这个 unicode 类型的 Python 对象中提取指向 char 类型的 C++ 指针。”您能否提供示例代码和/或说明您正在尝试做什么?
  • 你能澄清一下这个问题吗?真的不清楚。你提出提取的论据是什么?它是文字字符串吗?一个 boost::python::object?
  • 你应该接受你的问题的正确答案。

标签: python boost unicode boost-python


【解决方案1】:

这对我来说是编译和工作的,使用您的示例字符串并使用 Python 2.x:

void process_unicode(boost::python::object u) {
  using namespace boost::python;
  const char* value = extract<const char*>(str(u).encode("utf-8"));
  std::cout << "The string value is '"<< value << "'" << std::endl;
}

如果您希望将PyUnicode (@Python2.x) 自动转换为const wchar_t*ICU 的类型,您可以编写a specific from-python converter(这似乎是处理Unicode 的常见建议在 C++ 上)。

如果您希望完全支持 ASCII 范围以外的 unicode 字符(例如,áçï 等重音字符,您将需要编写from-python 转换器。请注意,如果您希望同时支持 Python 2.x 和 3.x,则必须单独完成此操作。对于 Python 3.x,PyUnicode type was deprecated 和现在的字符串类型为 @987654330 @ 用于 Python 2.x。没有什么是 #if PY_VERSION_HEX &gt;= 0x03000000 无法处理的

[编辑]

上面的评论是错误的。请注意,由于 Python 3.x 将 unicode 字符串视为普通字符串,boost::python 会将其包装到 boost::python::str 对象中。我还没有验证这些是如何处理 w.r.t 的。在这种情况下是 unicode 翻译。

【讨论】:

    【解决方案2】:

    你试过了吗

    extract<std::string>("a unicode string").c_str() 
    

    extract<wchar_t*>(...)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多