为了账号安全,请及时绑定邮箱和手机立即绑定

Python到C ++字符编码

Python到C ++字符编码

慕少森 2021-03-31 07:07:10
我有一个使用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é我只希望“打印”能够正确显示信息...
查看完整描述

3 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

这并不像看起来那样简单,我错了,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 = u'test\xe9'

U + 00E9是é的代码。之后,robin是unicode,可以encoded像这样进入任何您想要的环境:robin.encode('utf-8')。这样,您可以控制变量以针对每种可能的输出方案以任何编码对其进行编码。

要恢复它:

  1. 找出控制台的编码

  2. encoderobin根据此编码的变量

  3. 控制台应正确输出

希望这会有所帮助!


查看完整回答
反对 回复 2021-04-01
?
BIG阳

TA贡献1859条经验 获得超6个赞

您调用PyObject_Reprrepr(robin)Python中相同的方法,并产生文字字符\x82。将其从您的通话链中删除。


查看完整回答
反对 回复 2021-04-01
  • 3 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号