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

时间:2011-07-08 09:45:24

标签: python boost unicode boost-python

当我执行extract<const char*>("a unicode string")

时,代码似乎会崩溃

任何人都知道如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

这为我编译,使用您的示例字符串并使用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*或将a specific from-python converter的类型自动转换为ICU,则可以写PyUnicode type was deprecated是在C ++上处理Unicode的常见建议。)

如果您想完全支持不在ASCII范围内的unicode字符(例如,áçï等重音字符,那么将需要编写from-python转换器。注意,如果你想同时支持Python 2.x和3.x,则必须单独完成。对于Python 3.x,{{3}}和现在字符串类型的作用是用于Python 2.x的PyUnicode没有任何#if PY_VERSION_HEX >= 0x03000000无法处理

<强> [编辑]

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

答案 1 :(得分:1)

你试过吗

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

extract<wchar_t*>(...)