15.15 C字符串转换为Python字符串
问题
怎样将 C 中的字符串转换为 Python 字节或一个字符串对象?
解决方案
C 字符串使用一对 char *
和 int
来表示, 你需要决定字符串到底是用一个原始字节字符串还是一个 Unicode 字符串来表示。 字节对象可以像下面这样使用 Py_BuildValue()
来构建:
如果你要创建一个 Unicode 字符串,并且你知道 s
指向了 UTF-8 编码的数据,可以使用下面的方式:
如果 s
使用其他编码方式,那么可以像下面使用 PyUnicode_Decode()
来构建一个字符串:
如果你恰好有一个用 wchar_t *, len
对表示的宽字符串, 有几种选择性。首先你可以使用 Py_BuildValue()
:
另外,你还可以使用 PyUnicode_FromWideChar()
:
对于宽字符串,并没有对字符数据进行解析——它被假定是原始 Unicode 编码指针,可以被直接转换成 Python。
讨论
将 C 中的字符串转换为 Python 字符串遵循和 I/O 同样的原则。 也就是说,来自 C 中的数据必须根据一些解码器被显式的解码为一个字符串。 通常编码格式包括 ASCII、Latin-1和UTF-8. 如果你并不确定编码方式或者数据是二进制的,你最好将字符串编码成字节。 当构造一个对象的时候,Python 通常会复制你提供的字符串数据。 如果有必要的话,你需要在后面去释放 C 字符串。 同时,为了让程序更加健壮,你应该同时使用一个指针和一个大小值, 而不是依赖 NULL 结尾数据来创建字符串。
Last updated
Was this helpful?