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号