gpt4 book ai didi

Python c-api 和 unicode 字符串

转载 作者:太空狗 更新时间:2023-10-29 15:37:15 25 4
gpt4 key购买 nike

我需要在 python 对象和各种编码的 c 字符串之间进行转换。使用 PyUnicode_Decode 从 c 字符串到 unicode 对象非常简单,但是我不确定如何走另一条路

//char* can be a wchar_t or any other element size, just make sure it is correctly terminated for its encoding
Unicode(const char *str, size_t bytes, const char *encoding="utf-16", const char *errors="strict")
:Object(PyUnicode_Decode(str, bytes, encoding, errors))
{
//check for any python exceptions
ExceptionCheck();
}

我想创建另一个函数,它接受 python Unicode 字符串并使用给定的编码将其放入缓冲区,例如:

//fills buffer with a null terminated string in encoding
void AsCString(char *buffer, size_t bufferBytes,
const char *encoding="utf-16", const char *errors="strict")
{
...
}

我怀疑它与 PyUnicode_AsEncodedString 有关,但是它返回一个 PyObject,所以我不确定如何将它放入我的缓冲区...

注意:以上两种方法都是包装 python api 的 c++ Unicode 类的成员我正在使用 Python 3.0

最佳答案

I suspect it has somthing to do with PyUnicode_AsEncodedString however that returns a PyObject so I'm not sure how to put that into my buffer...

返回的 PyObject 是一个 PyStringObject,因此您只需使用 PyString_SizePyString_AsString 获取指向字符串缓冲区的指针并将其 memcpy 到您自己的缓冲区。

如果您正在寻找一种从 PyUnicode 对象直接进入您自己的字符缓冲区的方法,我认为您做不到。

关于Python c-api 和 unicode 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/570781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com