Python C-API и Unicode строки - PullRequest
       14

Python C-API и Unicode строки

4 голосов
/ 20 февраля 2009

Мне нужно конвертировать между объектами python и c строками различных кодировок. Переход от строки c к объекту Unicode был довольно прост с использованием PyUnicode_Decode, однако я не уверен, как пойти другим путем

//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();
}

Я хочу создать другую функцию, которая принимает строку Unicode Python и помещает ее в буфер с использованием заданного кодирования, например:

//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, поэтому я не уверен, как поместить это в мой буфер ...

Примечание: оба метода выше являются членами класса Unicode c ++, который переносит API Python Я использую Python 3.0

1 Ответ

3 голосов
/ 20 февраля 2009

Я подозреваю, что это имеет какое-то отношение к PyUnicode_AsEncodedString, однако возвращает PyObject, поэтому я не уверен, как поместить это в мой буфер ...

Возвращенный PyObject является PyStringObject, поэтому вам просто нужно использовать PyString_Size и PyString_AsString, чтобы получить указатель на буфер строки и записать его в свой собственный буфер.

Если вы ищете способ перейти напрямую из объекта PyUnicode в свой собственный буфер символов, я не думаю, что вы можете сделать это.

...