我正在尝试用C ++ 14构建一个Python扩展。当用Python初始化模块时,我要求调用者给我一个回调函数,它将一个字符串作为输入。
当调用模块中的函数时,我想要的是从磁盘读取文本文件,该文件可能包含非英文字符。所以我在C ++代码中将其作为wstring
读入内存。
下一步是将此wstring
传递给Python代码。我应该如下定义用户回调函数:
typedef std::string (*UserCallbackFunc)(std::string);
并处理wstring
到utf-8 string
转换,如下所示:
string wstring2utf8string(wstring input)
{
wstring_convert<codecvt_utf8<wchar_t>> converter;
return converter.to_bytes(input);
}
或者我可以简单地定义回调,如
typedef std::wstring (*UserCallbackFunc)(std::wstring);
直接传入我从磁盘读取的内容?
答案 0 :(得分:0)
让我自己回答这个问题。
我的目标是将非英语字符从C ++制作的Python 3扩展传递给Python回调函数。显然,除了使用UTF-16之外,UTF-8足以让我实现这一目标。在C ++中,string
对于UTF-8来说已经足够了,wstring
对于UTF-16和UTF-32来说已经足够了。因此,在我将所有wstring
更改为string
后,UTF-8中的非英语字符从双方都可以正常工作。