2012-08-12 59 views
2

所以我有这样的事情:的Python:什么是字符串相当于[A:B],但对Unicode

x = "CЕМЬ" 
x[:len(x)-1] 

即从字符串中删除的最后一个字符。 但它不起作用,它给了我一个错误。我想这是因为它是Unicode。那么你如何在非ansi字符串上做这种简单的格式。

+0

为什么是unicode这里的问题吗?这看起来不像一个unicode字符串。除此之外:字符串是不可变的。 – 2012-08-12 12:01:17

+1

@Maulwurfn:因为它是python 2中的一个字节字符串,而不是一个unicode字符串,因此OP正在分割字节,而不是字符。 – 2012-08-12 12:04:10

回答

0
x = u'some string' 
x2 = x[:-1] 
6

这是因为在Python 2.x的"CЕМЬ",是写字节b'C\xd0\x95\xd0\x9c\xd0\xac'的一种奇怪的方式。

你想要一个字符字符串。在Python 2.x中,字符串的前缀是一个u

x = u"CЕМЬ" 
x[:-1] # Returns u"CЕМ" (len(x) is implicit for negative values) 

如果你在程序中写这篇(而不是一个交互式shell),你会想specify a source code encoding。要做到这一点,只需将下面的行添加到文件的开头,其中utf-8符合您file encoding

# -*- coding: utf-8 -*- 
+0

或使用'\ uxxxx' unicode转义文字来表示任何不是ASCII字符的东西(python 2)。在py3k中,默认的源代码编码是UTF-8。 – 2012-08-12 12:19:55

+0

谢谢!它现在工作:) – 2012-08-12 12:23:35

1

保存文件utf-8编码:

# -*- coding: utf-8 -*- 
x = u'CЕМЬ' 
print x[:-1] #prints CЕМ 
相关问题