📜  C字符串转换为Python

📅  最后修改于: 2022-05-13 01:54:34.392000             🧑  作者: Mango

C字符串转换为Python

对于表示为一对char *, int的 C字符串,它决定是否将字符串表示为原始字节字符串或 Unicode字符串。

字节对象可以使用Py_BuildValue()作为

// Pointer to C string data
char *s; 
  
// Length of data 
int len; 
  
// 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");
  
// Example
obj = PyUnicode_Decode(s, len, "latin-1", "strict");
obj = PyUnicode_Decode(s, len, "ascii", "ignore");


如果需要将宽字符串表示为wchar_t *, len对。然后是几个选项,如下所示 -

// 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);
  • 来自 C 的数据必须根据某些编解码器显式解码为字符串
  • 常见的编码包括 ASCII、Latin-1 和 UTF-8。
  • 如果您的编码未知,那么最好将字符串编码为字节。
  • Python在创建对象时总是复制字符串数据(被提供)。
  • 此外,为了获得更好的可靠性,应该使用指针和大小来创建字符串,而不是依赖以 NULL 结尾的数据。