在python3中将PyBytesObject类型转换为PyUnicodeObject类型

时间:2010-05-17 11:25:33

标签: python python-3.x cpython python-c-api

如何将pyunicodeobject类型转换为pybytesobject类型?

示例:

function(PyBytesObject* byteobj){
....operation..
}

PyUnicodeObject* Uniobj;

function((PyBytesObject*) Uniobj);

结果导致了总线错误。

1 个答案:

答案 0 :(得分:2)

你需要像在Python中一样对它进行编码。对于utf-8使用:

PyObject* PyUnicode_AsUTF8String(PyObject *unicode)
     

返回值:新参考。
  使用UTF-8对Unicode对象进行编码,并将结果作为Python字节对象返回。错误处理是“严格的”。如果编解码器引发异常,则返回NULL。

或者,如果你想要它在utf-16或其他编码中,那么也有api。请参阅http://docs.python.org/py3k/c-api/unicode.html处的文档(搜索以PyUnicode_As开头的函数)。

执行编码时不要忘记检查返回码,并在完成后释放对bytes对象的引用。