Python、len与Unicode字符串切片
我遇到了一个问题,需要让一个字符串适应屏幕上分配的空间。因为我使用的unicode的len()和切片操作(slices[])实际上是针对字节的,所以我经常把unicode字符串切得太短。比如说,符号€
在屏幕上只占一个位置,但在len()或切片中却占了两个位置。
我已经正确设置了编码头,并且愿意使用其他方法来处理这个问题,而不是仅仅依赖切片或len()。不过,我真的需要知道这个字符串会占用多少个空间,以及如何把它切割到可用的长度。
$cat test.py
# -*- coding: utf-8 -*-
a = "2 €uros"
b = "2 Euros"
print len(b)
print len(a)
print a[3:]
print b[3:]
$python test.py
7
9
��uros
uros
1 个回答
17
你那里并不是在创建Unicode字符串,而是在创建用UTF-8编码的字节字符串(这种编码是可变长度的,正如你所看到的)。你需要使用像 u"..."
(或者 u'...'
)这样的常量。如果这样做,你就会得到预期的结果:
% cat test.py
# -*- coding: utf-8 -*-
a = u"2 €uros"
b = u"2 Euros"
print len(b)
print len(a)
print a[3:]
print b[3:]
% python test.py
7
7
uros
uros