2005年06月03日 星期五 17:33
Neo Chan (netkiller) wrote:
> 
> >>>len('中')
> 3
看来你用的是UTF-8编码
> >>>a=u'中'
这么写在UTF-8的控制台下等价于a=u'\xe4\xb8\xad',也即
a=u'\u00e4\u00b8\u00ad',是由三个unicode字符组成的unicode字符串。
> >>>a
> u'\xe4\xb8\xad'
所以就会出这个结果了
> >>>print a
> Traceback (most recent call last):
>   File "", line 1, in ?
 > UnicodeError: ASCII encoding error: ordinal not in range(128)
> 为什么不行????
print语句需要将unicode对象转换成string(字节序列),隐含调用了encode方
法。而默认的encoding是ascii,不能表示这三个字符,因此抛出异常。
(不过在我这里直接print并不报错,而是输出了三个字符。sys.stdout.write(a)
则报错了,不知道为什么)
> 
> >>>a[0]
> 
> u'\xe4'
> 输出是u'\xe4',为什么不试‘中’
因为a是由三个unicode字符组成,这里返回第一个字符。
在UTF-8控制台下只能用unicode('中', 'UTF-8')来产生unicode字符“中”(即u'\
u4e2d')
在程序源代码里则可以使用注释
# --*-- encoding: UTF-8 --*--
表明编码后,采用u'中'来直接生成。
Zeuux © 2025
京ICP备05028076号