2011-11-16 59 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