Python到C ++字符编码

我有一个使用Python C / API来为数据库信息调用Python脚本的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")));

我得到一个充满以下内容的字符*:test \ x82


从中创建一个字符串或wstring会得到相同的结果。


我希望能够创建一个表示“testé”的字符串,并且我猜想首先要能够在python终端中正确输出变量,如下所示:


    >>> robin = 'testé'

    >>> robin

    'testé'

我尝试了Django的encode()encode(),sys.setdefaultencoding,sys.stdout.encoding,甚至是一些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é

我只希望“打印”能够正确显示信息...


慕少森
浏览 193回答 3
3回答

SMILET

这并不像看起来那样简单,我错了,utf-8中的急性e是c3 a9。使用python的解释器从控制台使用编码非常困难。您必须正确对待几件事。首先,您的控制台默认代码页(编码)。您可以通过发出chcp命令来检查。我的是437,但几乎不依赖于Windows安装。latin-1的代码页为28591,而utf-8的代码页为65001。奇怪的是,当控制台的代码页为65001时,使用python解释器很复杂,似乎尚未声明它是utf-8python编码库中的同义词。我的意思是,您必须正确地对待自己的想法。如果您的控制台在代码页X中,则您对python解释器的输入将以X编码,您将看到X能够管理字节的输出。我建议您在python中使用unicode而不是硬编码的字符串,并使用scape字节代替字符。例如,您可以这样声明robin:robin&nbsp;=&nbsp;u'test\xe9'U + 00E9是é的代码。之后,robin是unicode,可以encoded像这样进入任何您想要的环境:robin.encode('utf-8')。这样,您可以控制变量以针对每种可能的输出方案以任何编码对其进行编码。要恢复它:找出控制台的编码encoderobin根据此编码的变量控制台应正确输出希望这会有所帮助!

BIG阳

您调用PyObject_Repr与repr(robin)Python中相同的方法,并产生文字字符\x82。将其从您的通话链中删除。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python