2011-11-16 56 views
1

我,其中一個我指定一個參數一個Python腳本:Python的特殊字符的Unicode

parser = optparse.OptionParser() 
parser.add_option("-D", "--departure", dest="departure",default="", type="string",help="specify departure") 

,在我的劇本,我必須與輸入的字符串的幾件事情。

當我鍵入:-D「杜塞爾多夫」

字符串是不腳本

有人告訴我,做U「杜塞爾多夫」正確識別,但我需要在一個變量去庫存化「杜塞爾多夫」

東西像變量= u +「杜塞爾多夫」....嗯我真的不知道該怎麼做。

謝謝你的幫助。

問候。

+5

有人還向你發送了一個鏈接[「Python in Python,Completely Demystified」](http://farmdev.com/talks/unicode/)。也許你應該閱讀它。 :) –

回答

0

PEP-0264說明如何在Python腳本中使用Unicode。

或者,對於懶惰的,有啓動腳本:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

print u"Düsseldorf" 

而且不要忘了將它解決爲UTF-8無BOM。

0

你不僅需要指定你的Python源的字符編碼,可以代表ü字符:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

但你還需要記住,命令行參數(在Unix中至少,我不能說Windows)是字節。因此,您應該將該選項指定爲字節字符串而不是字符(Unicode)字符串。

例如:

parser.add_option("-D", "--departure", dest="departure", 
default=u"Düsseldorf".encode('UTF-8'), 
type="string",help="specify departure") 

現在默認參數是一個字節串,就好像你已經傳遞給add_option方法的所有其他參數。

此外,您必須確保如果有人將此字符串輸入到他們的終端中,他們會使用UTF-8的終端字符編碼進行此操作。如果他們使用不同的終端字符編碼,則會在命令行中顯示不同的字節字符串。這只是Unix的工作方式,Python無權改變它。

+1

那麼我該怎麼辦:myvar =「杜塞爾多夫」,那麼myvar2 = umyvar? –

+0

在Python 2中,'myvar =「Düsseldorf」'語句不是真正有效的,因爲如果不使用'u'前綴,則指定一個字節字符串,並且ASCII將隱式地用於解釋字面字符串。 – wberry

+0

在Python 2中,像這樣的字符串是字節字符串,像這樣的字符串是字符串。在Python 3中,像這樣的字符串是字符串,像這樣的字符串是字節串。在這兩種情況下,字節字符串都是使用ASCII隱式解釋的,所以像'ü'這樣的字符不應出現在字節字符串中。 – wberry