2012-08-12 53 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ЕМ 
相關問題