在用C ++编写的Python 3扩展中,如何将wstring对象传递给Python代码?

时间:2018-03-13 19:01:47

标签: c++ python-3.x python-extensions

我正在尝试用C ++ 14构建一个Python扩展。当用Python初始化模块时,我要求调用者给我一个回调函数,它将一个字符串作为输入。

当调用模块中的函数时,我想要的是从磁盘读取文本文件,该文件可能包含非英文字符。所以我在C ++代码中将其作为wstring读入内存。

下一步是将此wstring传递给Python代码。我应该如下定义用户回调函数:

typedef std::string (*UserCallbackFunc)(std::string);

并处理wstringutf-8 string转换,如下所示:

string wstring2utf8string(wstring input)
{
    wstring_convert<codecvt_utf8<wchar_t>> converter;
    return converter.to_bytes(input);
}

或者我可以简单地定义回调,如

typedef std::wstring (*UserCallbackFunc)(std::wstring);

直接传入我从磁盘读取的内容?

1 个答案:

答案 0 :(得分:0)

让我自己回答这个问题。

我的目标是将非英语字符从C ++制作的Python 3扩展传递给Python回调函数。显然,除了使用UTF-16之外,UTF-8足以让我实现这一目标。在C ++中,string对于UTF-8来说已经足够了,wstring对于UTF-16和UTF-32来说已经足够了。因此,在我将所有wstring更改为string后,UTF-8中的非英语字符从双方都可以正常工作。