我有一个C++程序,使用Python C/API调用Python脚本获取数据库信息,但接收到的数据编码方式不正确。这是在法国,因此我的数据具有重音符号和其他非英语字符。
在将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
从中创建一个string或wstring会得到相同的结果。
我希望能够创建一个字符串,例如"testé",我猜想首先需要正确地在Python终端中输出该变量:
>>> robin = 'testé'
>>> robin
'testé'
我尝试使用encode() decode()、sys.setdefaultencoding、sys.stdout.encoding,甚至从Django中使用一些force_text和force_bytes。似乎没有任何方法可以让我得到一个包含实际字符的标准C++字符串。非常感谢任何帮助。
FYI - 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é
我只希望“print”所做的能正确地显示信息...
robin
变量,并将其从C语言获取以使用C输出,对吗?在我看来,问题可能是正确的UTF-8编码应该是\xc2\x82而不是\x82,这可能是输出问题的原因。 - Paulo Busys.stdout.encoding
是什么? - Janne Karila