Question

Je dois convertir entre les objets python et les chaînes de c de codages différents. Passer d'une chaîne de c à un objet unicode était assez simple en utilisant PyUnicode_Decode, mais je ne suis pas sûr de savoir comment aller dans l'autre sens

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

Je veux créer une autre fonction qui prend la chaîne Unicode python et il met dans un tampon à l'aide d'un encodeing donné, par exemple:

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

Je soupçonne qu'il a somthing à voir avec PyUnicode_AsEncodedString mais qui retourne une PyObject donc je ne suis pas sûr de savoir comment mettre cela dans mon tampon ...

Note: les deux méthodes ci-dessus sont des membres d'une classe c ++ Unicode qui enveloppe le python api J'utilise Python 3.0

Était-ce utile?

La solution

  

Je soupçonne qu'il a somthing à voir avec PyUnicode_AsEncodedString mais qui retourne une PyObject donc je ne suis pas sûr de savoir comment mettre cela dans mon tampon ...

Le PyObject retourné est un PyStringObject, vous avez juste besoin d'utiliser PyString_Size et PyString_AsString pour obtenir un pointeur vers la mémoire tampon de la chaîne et memcpy à votre propre tampon.

Si vous êtes à la recherche d'un moyen d'aller directement à partir d'un objet PyUnicode dans votre propre char buffer, je ne pense pas que vous pouvez le faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top