Wydaje się, że kod będzie katastrofy, kiedy zrobić extract<const char*>("a unicode string")
jak wyodrębnić ciąg Unicode boost.python
Ktoś wie jak rozwiązać ten problem?
Wydaje się, że kod będzie katastrofy, kiedy zrobić extract<const char*>("a unicode string")
jak wyodrębnić ciąg Unicode boost.python
Ktoś wie jak rozwiązać ten problem?
Czy próbowałeś
extract<std::string>("a unicode string").c_str()
lub
extract<wchar_t*>(...)
kompiluje i działa to dla mnie z przykładu ciąg i przy użyciu Pythona 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;
}
You można napisać a specific from-python converter, jeśli chcesz automatycznie konwertować PyUnicode
(@ Python2.x) do const wchar_t*
lub do typu z ICU (która wydaje się być powszechną rekomendacją do obsługi Unicode w C++).
Jeśli chcesz pełne wsparcie dla znaków Unicode, które nie znajdują się w zakresie ASCII (na przykład znaki diakrytyczne, takie jak á
, ç
lub ï
, ty trzeba napisać konwerterem-python. Uwaga ta będzie miała należy to zrobić oddzielnie dla Pythona 2.x i 3.x, jeśli chcesz obsługiwać oba. Dla Python 3.x, PyUnicode type was deprecated, a teraz typ łańcucha działa jako PyUnicode
używany do Pythona 2.x.
Nic, co para z
.#if PY_VERSION_HEX >= 0x03000000
nie może obsłużyć
[edycja]
Powyższy komentarz był nieprawidłowy. Zauważ, że ponieważ Python 3.x traktuje ciągi Unicode jak zwykłe łańcuchy, boost::python
zapakuje je w obiekty boost::python::str
. Nie sprawdziłem, jak są obsługiwane w.r.t. tłumaczenie unikodu w tym przypadku.
Nie masz jednoznacznej odpowiedzi, ale [tutaj] (http://mail.python.org/pipermail/cplusplus-sig/2009-July/014720.html) i [tutaj] (http: // mail .python.org/pipermail/cplusplus-sig/2009-July/014664.html) Znalazłem kilka referencji, które mogą Cię zainteresować. – mac
Czy to błąd? "TypeError: Żaden zarejestrowany konwerter nie był w stanie wyodrębnić wskaźnika C++ do typu char z tego obiektu Pythona typu unicode." Czy mógłbyś podać przykładowy kod i/lub dać pojęcie o tym, co próbujesz zrobić? –
Czy możesz wyjaśnić pytanie? To naprawdę nie jest jasne. Jaki argument podajesz, aby wydobyć? Czy to ciąg dosłowny? A boost :: python :: object? – eudoxos