Python传递Unicode字符串给C++模块

2024-10-01 17:32:35 发布

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

现在我正在使用一个现有的模块,它提供了一个C++接口,并用字符串进行了一些操作。在

我需要使用Unicode字符串,不幸的是,该模块不支持Unicode接口,因此我编写了一个额外的函数来添加到接口中:

void SomeUnicodeFunction(const wchar_t* string)

但是,当我尝试在Python中使用以下代码时:

^{pr2}$

我得到这个错误:

ArgumentError: Python argument types in
    SomeModule.SomeUnicodeFunction(SomeModule, c_wchar_p)
did not match C++ signature:
    SomeUnicodeFunction(... {lvalue}, wchar_t const*)

(名称已更改)。在

我尝试将C++模块中的WCHARGT更改为PyuUnCoD,但没有成功。我怎么解决这个问题?在


Tags: 模块函数字符串代码string错误unicodeargument
2条回答

对于Linux,您不必更改API,只需执行以下操作:

SomeModule.SomeFunction(str(s.encode('utf-8')))

在Windows上,所有Unicode API都使用UTF-16 LE(Little-Endian),因此您必须这样编码:

^{pr2}$

很好了解:wchar在不同的平台上可以有不同的大小:8位、16位或32位。在

找到了解决问题的方法:

SomeModule.SomeUnicodeFunction(str(s.encode('utf-8')))

到目前为止,它对我的目的来说似乎运行得很好。在

更新:实际上,使用UTF-8意味着我不需要使用SomeUnicodeFunction,并且可以使用标准的SomeFunction,而无需专门针对unicode。每天学点新东西我想:)。在

相关问题 更多 >

    热门问题