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 *, len
un 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