Pergunta

Eu preciso converter entre objetos Python e cordas c de várias codificações. Indo de uma string c para um objeto unicode era bastante simples usando PyUnicode_Decode, no entanto eu não estou certo como ir a outra maneira

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

Eu quero criar uma outra função que leva a corda e coloca-Unicode python em um buffer usando um determinado encodeing, por exemplo:

//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")
{
    ...
}

Eu suspeito que foi somthing para fazer com PyUnicode_AsEncodedString no entanto, que retorna um PyObject então eu não tenho certeza de como colocar isso em meu tampão ...

Nota: ambos os métodos acima são membros de uma classe C ++ Unicode que envolve a API do Python Eu estou usando Python 3.0

Foi útil?

Solução

Eu suspeito que foi somthing para fazer com PyUnicode_AsEncodedString no entanto, que retorna um PyObject então eu não tenho certeza de como colocar isso em meu tampão ...

O PyObject retornado é um PyStringObject, assim você só precisa usar PyString_Size e PyString_AsString para obter um ponteiro para o buffer da corda e memcpy-lo para seu próprio buffer.

Se você está procurando uma maneira de ir diretamente de um objeto PyUnicode em seu próprio buffer char, eu não acho que você pode fazer isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top