在字符串值前面的“ u”符号是什么意思?

是的,简而言之,我想知道为什么我看到我的键和值前面有一个 u。

我正在呈现一个表单。该表单具有用于特定标签的复选框和用于 ip 地址的一个文本字段。我正在创建一个字典,键是在 list _ key 中硬编码的标签,字典的值取自表单输入(list _ value)。字典是创建的,但对于某些值,它的前面是 u。下面是字典的输出示例:

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

有人能解释一下我做错了什么吗。我没有得到误差时,我模拟类似的方法在符号。欢迎提出任何改进代码的建议。谢谢你

#!/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)
126913 次浏览

这是一个功能,不是一个错误。

请参阅 http://docs.python.org/howto/unicode.html,特别是“ unicode 类型”一节。

字符串值前面的“ u”表示该字符串是 Unicode 字符串。Unicode 是一种比普通 ASCII 能够管理的更多字符的表示方法。事实上,你看到的 u意味着你在 Python 2上——在 Python 3上默认字符串是 Unicode,但是在 Python 2上,前面的 u区分 Unicode 字符串。这个答案的其余部分将关注于 Python2。

可以通过多种方式创建 Unicode 字符串:

>>> u'foo'
u'foo'
>>> unicode('foo') # Python 2 only
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
Ознакомьтесь с документацией

在大多数情况下,Unicode 和非 Unicode 字符串在 Python2上是可互操作的。

您将看到其他符号,例如“原始”符号 r,用于告诉字符串不要解释反斜杠。这对于编写正则表达式非常有用。

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

Unicode 和非 Unicode 字符串在 Python2上可以相等:

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

但不是在 Python 3上:

>>> x = u'asdf' # Python 3
>>> y = b'asdf' # b indicates bytestring
>>> x == y
False