如何使用ctypes解析unicode字符串?

2024-10-01 09:18:40 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python的cType模块将Python发送到C++的字符串需要解析为CXCHAREP P(char *)。我发现我需要使用pythonpure字符串,而不是pythonunicode字符串。如果我使用unicode字符串,变量就会被覆盖而不是被正确地发送。下面是一个例子:

C++ +<

void test_function(char * a, char * b, char * c) {
    printf("Result: %s %s %s", a, b, c);
}

Python

^{pr2}$

运行上述Python代码将在stdout中提供以下内容:

Result: z z z
Result: x y z

这是为什么,这是ctypes的怪癖吗?如果我可以得到unicode字符串,有什么好方法可以避免这种怪癖呢?在

谢谢!在


Tags: 模块字符串testunicodefunctionresultctype例子
2条回答

尝试使用c_char而不是c_char: https://docs.python.org/2/library/ctypes.html

C/C++ has no real support for Unicode,所以你真的无能为力。您必须将ESEM编码为将其传递到C/C++世界中:根据UTF-8、UTF-16或UTF-32,可以根据用例使用USEF-8。在

例如,可以将它们编码为UTF-8,并传递一个字节数组(^ {CD1>}在Python和^ {CD2>} C/C++):

lib.test_function(u'x'.encode('utf8'),
                  u'y'.encode('utf8'),
                  u'z'.encode('utf8'))

确切地说,你选择的编码是另一个故事,但这将取决于C++库愿意接受什么。在

相关问题 更多 >