Conversión de strings C a Python

Para las strings C representadas como un par char *, int, es decidir si la string se presenta como una string de bytes sin formato o como una string Unicode.

Los objetos de byte se pueden construir usando Py_BuildValue()como

// Pointer to C string data
char *s; 
  
// Length of data 
int len; 
  
// Make a bytes object
PyObject *obj = Py_BuildValue("y#", s, len);

 
Para crear una string Unicode y se sabe que s apunta a datos codificados como UTF-8, el código que se proporciona a continuación se puede usar como:

PyObject *obj = Py_BuildValue("s#", s, len);

 
Si s está codificado en alguna otra codificación conocida, PyUnicode_Decode()se puede hacer una string usando como:

PyObject *obj = PyUnicode_Decode(s, len, "encoding", "errors");
  
// Example
obj = PyUnicode_Decode(s, len, "latin-1", "strict");
obj = PyUnicode_Decode(s, len, "ascii", "ignore");

 
Si una string ancha necesita representarse como wchar_t *, lenun par. Luego hay algunas opciones como se muestra a continuación:

// Wide character string
wchar_t *w;
  
// Length
int len; 
  
// Option 1 - use Py_BuildValue()
PyObject *obj = Py_BuildValue("u#", w, len);
  
// Option 2 - use PyUnicode_FromWideChar()
PyObject *obj = PyUnicode_FromWideChar(w, len);
  • Los datos de C deben decodificarse explícitamente en una string de acuerdo con algún códec
  • Las codificaciones comunes incluyen ASCII, Latin-1 y UTF-8.
  • Si no se conoce la codificación, es mejor codificar la string como bytes.
  • Python siempre copia los datos de la string (que se proporcionan) al crear un objeto.
  • Además, para una mejor confiabilidad, las strings deben crearse utilizando un puntero y un tamaño en lugar de depender de datos terminados en NULL.

Publicación traducida automáticamente

Artículo escrito por manikachandna97 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *