如何将 PyObject 转换为 UTF-8 字符串
How to convert PyObject to UTF-8 string?
我正在尝试将字符串值传递给Python函数并获取utf-8字符串值。该函数检索日语字符并返回另一种语言的字符。
我在 Python 脚本中使用了ctypes.windll.user32.MessageBoxW
,并确保 Python 函数没有问题。我尝试了一个简单的功能,如return 'hello world'
来测试。我还用assert
检查了每个功能。我想问题始于PyBytes_AsString
.它始终返回DB DB DB DB DB DB DB...
(十六进制(。但我不知道如何解决这个问题。
char* result;
PyObject* module, *func, *arg, *ret, *value;
Py_Initialize();
PyObject* sysPath = PySys_GetObject("path");
PyObject* path = PyUnicode_FromString(".");
PyList_Append(sysPath, path);
module = PyImport_ImportModule("test");
if (module != 0)
{
const wchar_t* w = L"翻訳テスト";
func = PyObject_GetAttrString(module, "translate");
arg = PyTuple_New(1);
value = PyUnicode_FromWideChar(w, wcslen(w));
PyTuple_SetItem(arg, 0, value);
ret = PyObject_CallObject(func, arg);
PyObject* repr = PyObject_Repr(ret);
PyObject* str = PyUnicode_AsEncodedString(repr, "utf-8", "strict");
result = PyBytes_AsString(str);
Py_DECREF(repr);
Py_DECREF(str);
Py_DECREF(module);
Py_DECREF(func);
Py_DECREF(arg);
Py_DECREF(ret);
fstream file("text.txt", std::ios::out);
file << result;
file.close();
}
Py_Finalize();
result = PyBytes_AsString(str)
返回指向 str
的内部缓冲区的指针,因此在将result
写入文件之前不要Py_DECREF(str)
。
相关文章:
- 在C++中使用 UTF-8 字符串和字符
- 在 node.js 中将缓冲区从 C++ 转换为 UTF-8 字符串
- 如何在 Visual C++ 中使用 UTF-8 字符串作为字符*?
- 如何正确地将 u8 字符串文字传递给接受 UTF-8 字符串的 C 函数
- 如何将 PyObject 转换为 UTF-8 字符串
- UTF-8字符串上的位XOR操作可提供非UTF-8输出
- 如何将UTF-8字符串转换为流的编码
- 检查 UTF-8 字符串在现代C++中是否有效
- c++ UTF-8 字符串 erro 从 10xxx 开始,带有 cpprestsdk
- 如何在C++中删除 UTF-8 字符串的最后一个字符
- 如何从 UTF-8 字符串的每个字符中获取 UNICODE 代码
- 如何在 iOS 中将 UTF-8 字符串转换为 wchar
- UTF-8字符串迭代器
- C++11 正则表达式是否适用于 UTF-8 字符串
- C/C++ PCRE 是否可以匹配 2 个或多个 UTF-8 代码点,这些代码点在 UTF-8 字符串中彼此相距甚远
- 如何在C++中更改拉丁语 UTF-8 字符串的大小写
- 处理 UTF-8 字符串
- UTF-8 字符串的简单加密,其中结果为以 NULL 结尾的字符串
- C++ 将 UTF-8 字符串转换为 ICU 的 StringPiece
- 检查 UTF-8 字符串在 Qt 中是否有效