擅长:python、mysql、java
<p>在3.0之前的Python版本中,有两种字符串“普通字符串”和“unicode字符串”。纯字符串(<code>str</code>)不能表示拉丁字母表以外的字符(为了简单起见,忽略代码页的详细信息)。Unicode字符串(<code>unicode</code>)可以表示任何字母表中的字符,包括一些虚构的字符,如克林贡语。</p>
<p>那么,为什么有两种字符串呢?既然Unicode可以覆盖所有的情况,那么使用Unicode是否更好呢?最好只有Unicode,但Python是在Unicode是表示字符串的首选方法之前创建的。在一种有许多用户的语言中转换字符串类型需要时间,在Python3.0中,最终所有字符串都是Unicode。</p>
<p>Python strings pre-3.0的继承层次结构是:</p>
<pre><code> object
|
|
basestring
/ \
/ \
str unicode
</code></pre>
<p>Python 2.3中引入的“basestring”可以看作是字符串统一方向上的一个步骤,因为它可以用来检查对象是<code>str</code>或<code>unicode</code>的实例</p>
<pre><code>>>> string1 = "I am a plain string"
>>> string2 = u"I am a unicode string"
>>> isinstance(string1, str)
True
>>> isinstance(string2, str)
False
>>> isinstance(string1, unicode)
False
>>> isinstance(string2, unicode)
True
>>> isinstance(string1, basestring)
True
>>> isinstance(string2, basestring)
True
</code></pre>