当我这样做时,代码似乎会崩溃 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;
}
你可以写a specific from-python converter ,如果您希望将 PyUnicode
(@Python2.x) 自动转换为 const wchar_t*
或来自 ICU 的类型(这似乎是在 C++ 上处理 Unicode 的常见建议)。
如果您希望完全支持不在 ASCII 范围内的 unicode 字符(例如,重音字符,例如 á
、ç
或 ï
,您将需要编写来自 python 的转换器。请注意,如果您希望同时支持 Python 2.x 和 3.x,则必须分别完成此操作。对于 Python 3。 x,PyUnicode type was deprecated,现在字符串类型作为用于 Python 2.x 的 PyUnicode
工作。无法处理。
[编辑]
上面的评论是错误的。请注意,由于 Python 3.x 将 unicode 字符串视为普通字符串,boost::python
会将其包装到 boost::python::str
对象中。我还没有验证这些是如何处理的。在本例中为 unicode 翻译。
关于python - 如何使用 boost.python 提取 unicode 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6622676/