当我执行extract<const char*>("a unicode string")
任何人都知道如何解决这个问题?
答案 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*>(...)