似乎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 ~ ?
如果是的话,如何完成它?
这些函数已在Python 3.x * 中重命名为PyBytes _ 。除非 另外注意到,3.x中可用的PyBytes函数是别名 他们的PyString_ *等价物来帮助移植。
答案 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中有意义。