Unicode 字符串
从Python2.0开始,程序员们可以使用一种新的数据类型来存储文本数据:Unicode 对象。它可以用于存储多 种Unicode数据(请参阅 http://www.unicode.org/ ),并且,通过必要时的自动转换,它可以与现有的字符串 对象良好的结合。
Unicode针对现代和旧式的文本中所有的字符提供了一个序列。 以前,字符只能使用256个序号,文本通常通过 绑定代码页来与字符映射。这很容易导致混乱,特别是软件的国际化(internationalization–通常写 做“i18n”–“i”+18 characters +“n”)。Unicode通过为所有字符定义一个统一的代码页解决了这个问 题。
Python中定义一个Unicode字符串和定义一个普通字符串一样简单:
>>> u’Hello World !’ u’Hello World !’
引号前小写的“u”表示这里创建的是一个Unicode字符串。如果你想加入一个特殊字符,可以使用Python的
Unicode-Escape 编码。如下例所示:
>>> u’Hello\u0020World !’ u’Hello World !’
被替换的 \u0020 标识表示在给定位置插入编码值为 0×0020 的 Unicode字符(空格符)。 其它字符也会被直接解释成对应的Unicode码。如果你有一个在西方国家常用的Latin-1编码字符串,你可以发
现Unicode字符集的前256个字符与Lation-1的对应字符编码完全相同。
另外,有一种与普通字符串相同的行模式。想要使用Python的Raw-Unicode-Escape 编码,你需要在字符串的引 号前加上 ur 前缀。如果在小写“u”前可能有不止一个反斜杠,它只会把那些单独的 \uXXXX 转化为Unicode字 符。
>>> ur’Hello\u0020World !’ u’Hello World !’
>>> ur’Hello\\u0020World !’ u’Hello\\\\u0020World !’
行模式在你需要输入很多个反斜杠时很有用,可能会用于正规表达式。 作为这些编码标准的一部分,Python提供了一个完备的方法集用于从已知的编码集创建Unicode字符串。 内置函数unicode() 提供了访问(编码和解码)所有已注册的Unicode编码的方法。它能转换众所周知的 Latin-1,
ASCII, UTF-8, 和 UTF-16。后面的两个可变长编码字符集用一个或多个byte存储Unicode字符。 默认的字符集
是 ASCII ,它只处理0到127的编码,拒绝其它的字符并返回一个错误。当一个Unicode字符串被打印、写入文
件或通过str()转化时,它们被替换为默认的编码。
>>> u”abc” u’abc’
>>> str(u”abc”)
’abc’
>>> u”äöü” u’\xe4\xf6\xfc’
>>> str(u”äöü”)
Traceback (most recent call last): File “”, line 1, in ?
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-2: ordinal not in range(128)
要把一个Unicode字符串用指定的字符集转化成8位字符串,可以使用Unicode对象提供的encode()方法,它有一 个参数用以指定编码名称。编码名称小写。
>>> u”äöü”.encode(‘utf-8′)
’\xc3\xa4\xc3\xb6\xc3\xbc’
如果你有一个特定编码的字符串,想要把它转为Unicode字符集,,可以使用uncode()函数,它以编码名做为第 二个参数。
>>> unicode(‘\xc3\xa4\xc3\xb6\xc3\xbc’, ‘utf-8′)
u’\xe4\xf6\xfc
转自:
http://www.jeapedu.com/blog/?cat=4