2011-11-21 171 views
14

我有点困惑。在Python中,二进制字符串,字节字符串,unicode字符串和普通旧字符串(str)之间有什么区别?我正在使用Python 2.6。二进制字符串,字节字符串,unicode字符串和普通字符串(str)之间的区别

+1

您应该指定是否使用Python 2或Python 3,因为它会产生巨大的差异。 –

+1

你正在使用哪个Python版本?在Python的上下文中,你在哪里遇到过“二进制字符串”这个词? –

+0

@JohnY我已经更新了这个问题。 –

回答

18

它取决于您使用的Python版本。

在Python 2.x中,如果您编写'abc'它的类型为str,但这意味着一个字节字符串。如果你想要一个Unicode字符串,你必须写u'abc'

在Python 3.x中,如果你写'abc'它仍然有类型str但现在这意味着这是一个Unicode字符的字符串。如果你想要一个字节字符串,你必须写b'abc'。不允许写u'abc'

 | 2.x      | 3.x 
--------+--------------------------+----------------------- 
Bytes | 'abc' <type 'str'>  | b'abc' <type 'bytes'> 
Unicode | u'abc' <type 'unicode'> | 'abc' <type 'str'> 
+0

谢谢你。只是让我理解得很好,基本上,字节字符串和普通字符串之间的区别在于字节字符串不能包含unicode字符? –

+2

@Imran Azad:您可以将字节字符串视为有序的字节列表 - 即0到255之间的整数。 Unicode字符串是Unicode字符(字母,数字,标点符号,小雪人(☃)等)的有序列表。我认为这种混淆来自Python 2.x将字节串视为字符串。这几乎可以工作,除非你开始使用ASCII范围以外的字符时遇到问题。 –

+0

啊我明白了,谢谢。 –