Parece que el código se bloqueará cuando lo haga extract<const char*>("a unicode string")
cómo extraer una cadena Unicode con Boost.Python
Alguien sabe cómo resolver esto?
Parece que el código se bloqueará cuando lo haga extract<const char*>("a unicode string")
cómo extraer una cadena Unicode con Boost.Python
Alguien sabe cómo resolver esto?
Ha intentado
extract<std::string>("a unicode string").c_str()
o
extract<wchar_t*>(...)
Esto compila y funciona para mí, con su ejemplo de cadena y el uso de 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;
}
Usted puede escribir a specific from-python converter, si desea convertir automáticamente PyUnicode
(@ Python2.x) a const wchar_t*
oa un tipo de ICU (que parece ser la recomendación común para tratar con Unicode en C++).
Si desea soporte completo a los caracteres Unicode que no están en el rango ASCII (por ejemplo, caracteres acentuados como á
, ç
o ï
, que necesitarán para escribir el convertidor de-pitón. Tenga en cuenta que esto tiene para hacer por separado para Python 2.xy 3.x, si desea admitir ambos. Para Python 3.x, el PyUnicode type was deprecated y ahora el tipo de cadena funciona como PyUnicode
para Python 2.x.
Nada que un par de
.#if PY_VERSION_HEX >= 0x03000000
no puede manejar
[editar]
El comentario anterior era incorrecto. Tenga en cuenta que, dado que Python 3.x trata las cadenas de Unicode como cadenas normales, boost::python
ajustará eso en los objetos boost::python::str
. No he verificado cómo se manejan esos w.r.t. traducción unicode en este caso.
No tiene una respuesta definitiva, pero [aquí] (http://mail.python.org/pipermail/cplusplus-sig/2009-July/014720.html) y [aquí] (http: // mail .python.org/pipermail/cplusplus-sig/2009-July/014664.html) Encontré algunas referencias que pueden ser de su interés – mac
¿Este es el error que está recibiendo? "TypeError: ningún convertidor registrado fue capaz de extraer un puntero C++ para escribir char de este objeto Python de tipo unicode". ¿Podría dar un código de ejemplo y/o dar una idea de lo que está tratando de hacer? –
¿Puedes aclarar la pregunta? Realmente no está claro. ¿Cuál es el argumento que das para extraer? ¿Es una cadena literal? Un impulso :: python :: ¿objeto? – eudoxos