Python C/API を使用して Python スクリプトを呼び出して DB 情報を取得する C++ プログラムがありますが、受信したデータが正しい方法でエンコードされていません。これはフランスにあるため、私のデータにはアクセントやその他の英語以外の文字が含まれています。
sys.defaultencoding が「utf-8」に設定された python ターミナルでは、例:
>>> robin = 'testé'
>>> robin
'test\x82'
>>> print robin
testé
>>> str(robin)
'test\x82'
私が電話した場合:
PyString_AsString(PyObject_Repr(PyObject_GetAttrString(/*PyObject of my Py_Init*/, "robin")));
次の内容で満たされた char* を取得します: test\x82
そして、そこから文字列またはwstringを作成すると、同じ結果が得られます。
"testé"という文字列を作成できるようにしたいと思います。次のように、Python ターミナルで変数を正しく出力できることから始まると思います。
>>> robin = 'testé'
>>> robin
'testé'
encode()、decode()、sys.setdefaultencoding、sys.stdout.encoding、さらには Django の force_text と force_bytes も試しました。実際の文字を含む標準の C++ 文字列を取得できるものはないようです。どんな助けでも大歓迎です。
参考までに - Python 2.7、Windows 8 x64、VS2012、および C++9
コメントに答える編集:
>>> import sys
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('utf-8')
>>> sys.getdefaultencoding()
'utf-8'
>>> robin = 'testé'
>>> robin
'test\x82'
>>> print robin
testé
「印刷」が情報を正しく表示するために何をしたいだけです...