2011-04-17 34 views
9

我正在處理的情況下,我需要在屏幕上分配的空隙中製作一個字符串,因爲我使用unicode len()和slices []顯然在字節上工作,我最終削減unicode字符串太短,因爲只佔用屏幕上的一個空間,而len()或slice []則佔用2個空間。Python,len和unicode字符串上的片段

我已經正確設置了編碼標題,並且我願意使用除slice或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 

回答

16

你不在那裏創建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 
+0

好的,我明白了,謝謝,將現有的包含這些符號的字符串轉換爲unicode的理想方式是什麼? – 2011-04-17 19:11:34

+3

對字節字符串使用'.decode(...)'方法;該參數是要使用的編解碼器。例如,如果一個字節串「s」是UTF-8編碼的,則s.decode('utf-8')是相應的Unicode字符串。 – 2011-04-17 19:13:04