string值前的'u'符号是什么意思?

是的,总之我想知道为什么我在我的钥匙和价值观前面看到au。

我正在渲染一个表单。 该表格具有特定标签的checkbox和IP地址的一个文本字段。 我正在创build一个字典,键是在list_key中硬编码的标签,并且字典的值是从表单input(list_value)中获取的。 字典是创build的,但是它的前面是一些值。 这里是字典的输出示例:

{u'1': {'broadcast': u'on', 'arp': '', 'webserver': '', 'ipaddr': u'', 'dns': ''}} 

有人可以请解释我做错了什么。 当我在pyscripter中模拟类似的方法时,我没有得到错误。 任何改善代码的build议都是值得欢迎的。 谢谢

 #!/usr/bin/env python import webapp2 import itertools import cgi form =""" <form method="post"> FIREWALL <br><br> <select name="profiles"> <option value="1">profile 1</option> <option value="2">profile 2</option> <option value="3">profile 3</option> </select> <br><br> Check the box to implement the particular policy <br><br> <label> Allow Broadcast <input type="checkbox" name="broadcast"> </label> <br><br> <label> Allow ARP <input type="checkbox" name="arp"> </label><br><br> <label> Allow Web traffic from external address to internal webserver <input type="checkbox" name="webserver"> </label><br><br> <label> Allow DNS <input type="checkbox" name="dns"> </label><br><br> <label> Block particular Internet Protocol address <input type="text" name="ipaddr"> </label><br><br> <input type="submit"> </form> """ dictionarymain={} class MainHandler(webapp2.RequestHandler): def get(self): self.response.out.write(form) def post(self): # get the parameters from the form profile = self.request.get('profiles') broadcast = self.request.get('broadcast') arp = self.request.get('arp') webserver = self.request.get('webserver') dns =self.request.get('dns') ipaddr = self.request.get('ipaddr') # Create a dictionary for the above parameters list_value =[ broadcast , arp , webserver , dns, ipaddr ] list_key =['broadcast' , 'arp' , 'webserver' , 'dns' , 'ipaddr' ] #self.response.headers['Content-Type'] ='text/plain' #self.response.out.write(profile) # map two list to a dictionary using itertools adict = dict(zip(list_key,list_value)) self.response.headers['Content-Type'] ='text/plain' self.response.out.write(adict) if profile not in dictionarymain: dictionarymain[profile]= {} dictionarymain[profile]= adict #self.response.headers['Content-Type'] ='text/plain' #self.response.out.write(dictionarymain) def escape_html(s): return cgi.escape(s, quote =True) app = webapp2.WSGIApplication([('/', MainHandler)], debug=True) 

string值前的“u”表示该string已被表示为unicode。 string之前的字母称为“string编码声明”。 Unicode是一种代表比正常情况下更多的字符的方法。

您可以将string转换为unicode多种方式:

 >>> u'foo' u'foo' >>> unicode('foo') u'foo' 

但真正的原因是代表这样的东西( 在这里翻译 ):

 >>> val = u'Ознакомьтесь с документацией' >>> val u'\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439' >>> print val Ознакомьтесь с документацией 

在大多数情况下,你不应该在这段代码中看到与ASCIIstring不同的错误。

还有其他的符号可以看到,例如告诉string不能解释任何特殊字符的“原始”符号。 在python中执行正则expression式时,这是非常有用的。

 >>> 'foo\"' 'foo"' >>> r'foo\"' 'foo\\"' 

ACSII和Unicodestring可以在逻辑上等效:

 >>> bird1 = unicode('unladen swallow') >>> bird2 = 'unladen swallow' >>> bird1 == bird2 True 

这是一个function,而不是一个错误。

请参阅http://docs.python.org/howto/unicode.html ,特别是“unicodetypes”部分。