PyBytes_Type和PyString_Type有什么区别

时间:2014-12-13 15:40:11

标签: python string unicode python-c-api

似乎Python 2有PyString_Type而Python 3有PyBytes_Type

引擎盖下发生了什么?

我正在编写一个C ++包装器(目前正在包装Python3,但我希望稍后再添加Python2),而我只是完成了包装字符串的任务。

2& 3是否对字节字符串和Unicode字符串提供单独支持是否正确,但是他们刚刚进行了一些重命名?

如果是这样,那么这个表是否正确?:

Py2 byte-string ~ PyString_Type             Py2 Unicode-string ~ PyUnicode_Type 
Py3 byte-string ~ PyBytes_Type              Py3 Unicode-string ~ ?

如果是的话,如何完成它?

编辑:Python2 doc for String说:

  

这些函数已在Python 3.x * 中重命名为PyBytes _ 。除非   另外注意到,3.x中可用的PyBytes函数是别名   他们的PyString_ *等价物来帮助移植。

1 个答案:

答案 0 :(得分:1)

在Python 2中,str包含字节(类型bytes == str),unicode包含Unicode字符串。因此2.x有效地有三种类型。

在Python 3中,bytes包含字节,str包含Unicode字符串。 3.x中的str类型是2.x的unicode类型。因此3.x有效地有两种类型。这是您应该采取的概念方法,任何2.x相关的工作也应该以这种方式分离Unicode字符串和字节。

基于文档中的this section,意味着{x}在2.x和3.x中用于Unicode字符串。 PyUnicode用于两者中的字节字符串,PyBytes类型仅在Python 2.x中有意义。