[英]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.