我有一个 C++ 程序,它使用 Python C/API 调用 Python 脚本以获取 DB 信息,但接收到的数据没有以正确的方式编码。这是在法国,所以我的数据有口音和其他非英语字符。
在 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é
我只想要“打印”所做的任何事情来正确显示信息......