C语⾔字符串转换为Python字符串的⽅法
问题
怎样将C中的字符串转换为Python字节或⼀个字符串对象?
解决⽅案
C字符串使⽤⼀对char *和int 来表⽰,你需要决定字符串到底是⽤⼀个原始字节字符串还是⼀个Unicode字符串来表⽰。字节对象可以像下⾯这样使⽤Py_BuildValue() 来构建:
char *s; /* Pointer to C string data */
编程先学c语言还是pythonint len; /* Length of data */
/* Make a bytes object */
PyObject *obj = Py_BuildValue("y#", s, len);
如果你要创建⼀个Unicode字符串,并且你知道 s 指向了UTF-8编码的数据,可以使⽤下⾯的⽅式:
PyObject *obj = Py_BuildValue("s#", s, len);
如果s 使⽤其他编码⽅式,那么可以像下⾯使⽤PyUnicode_Decode() 来构建⼀个字符串:
PyObject *obj = PyUnicode_Decode(s, len, "encoding", "errors");
/* Examples /*
obj = PyUnicode_Decode(s, len, "latin-1", "strict");
obj = PyUnicode_Decode(s, len, "ascii", "ignore");
如果你恰好有⼀个⽤wchar_t *, len 对表⽰的宽字符串,有⼏种选择性。⾸先你可以使⽤Py_BuildValue() :
wchar_t *w; /* Wide character string */
int len; /* Length */
PyObject *obj = Py_BuildValue("u#", w, len);
另外,你还可以使⽤PyUnicode_FromWideChar() :
PyObject *obj = PyUnicode_FromWideChar(w, len);
对于宽字符串,并没有对字符数据进⾏解析——它被假定是原始Unicode编码指针,可以被直接转换成Python。
讨论
将C中的字符串转换为Python字符串遵循和I/O同样的原则。也就是说,来⾃C中的数据必须根据⼀些解码器被显式的解码为⼀个字符串。通常编码格式包括ASCII、Latin-1和UTF-8. 如果你并不确定编码⽅式或者数据是⼆进制的,你最好将字符串编码成字节。当构造⼀个对象的时候,Python通常会复制你提供的字符串数据。如果有必要的话,你需要在后⾯去释放C字符串。同时,为了让程序更加健壮,你应该同时使⽤⼀个指针和⼀个⼤⼩值,⽽不是依赖NULL结尾数据来创建字符串。
以上就是C语⾔字符串转换为Python字符串的⽅法的详细内容,更多关于C语⾔字符串转换为Python字符串的资料请关注其它相关⽂章!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论