2011-07-08 28 views
14

看來,代碼會崩潰,當我做extract<const char*>("a unicode string")如何提取unicode字符串並帶有Boost.Python

有誰知道如何解決這個問題?

+0

還沒有一個明確的答案,但是這裏(http://mail.python.org/pipermail/cplusplus-sig/2009-July/014720.html)和[這裏](HTTP://郵件.python.org/pipermail/CPLUSPLUS-SIG/2009年7月/ 014664.html)我發現了一些參考資料,可能是你的興趣 – mac

+0

這是你所得到的錯誤? 「TypeError:沒有註冊的轉換器能夠提取C++指針,從這個類型爲unicode的Python對象中鍵入char。」你能給出示例代碼和/或讓你知道你想要做什麼嗎? –

+1

你能澄清這個問題嗎?這真的不清楚。你提出的解釋是什麼?它是一個文字串嗎?一個boost :: python :: object? – eudoxos

回答

1

你試過

extract<std::string>("a unicode string").c_str() 

extract<wchar_t*>(...) 
3

這編譯和你的榜樣字符串和使用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一個類型(即似乎是使用Unicode上C++處理的共同建議)。

如果你想的Unicode字符,這是不是在ASCII範圍(例如,重音符號如áçï,你需要寫的 - 蟒蛇轉換器的全面支持。請注意,這將有如果你想支持兩個單獨做的Python 2.x和3.x,。對於Python 3.x中,該PyUnicode type was deprecated現在的字符串類型的作品作爲PyUnicode用於爲Python 2.x的 沒有一對夫婦 #if PY_VERSION_HEX >= 0x03000000不能處理

上述評論是錯誤的。需要注意的是,因爲Python 3.x的把Unicode字符串作爲普通字符串,boost::python將換行到boost::python::str對象。我沒有證實這些是如何處理的。在這種情況下unicode翻譯。