繁体   English   中英

如何使用 boost.python 提取 unicode 字符串

[英]how to extract a unicode string with boost.python

当我执行extract<const char*>("a unicode string")时,代码似乎会崩溃

有谁知道如何解决这个问题?

这可以使用您的示例字符串并使用 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的类型(这似乎是在 C++ 上处理 Unicode 的常见建议),您可以编写一个特定的 from-python 转换器

如果您想完全支持 unicode 字符,这些字符不在 ASCII 范围内(例如,重音字符,如áçï ,您需要编写 from-python 转换器。请注意,这必须为 Python 单独完成2.x 和 3.x,如果您希望同时支持两者。对于 Python 3.x, PyUnicode 类型已被弃用,现在字符串类型的工作方式与用于PyUnicode 2.x 的 PyUnicode 一样。 没什么,几个 #if PY_VERSION_HEX >= 0x03000000无法处理

[编辑]

上面的评论是错误的。 Note that, since Python 3.x treats unicode strings as normal strings, boost::python will wrap that into boost::python::str objects. 我尚未验证如何处理这些 w.r.t。 unicode 翻译在这种情况下。

你有没有尝试过

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

或者

extract<wchar_t*>(...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM