Что означает символ ' u ' перед строковыми значениями? [дубликат]
этот вопрос уже есть ответ здесь:
- что такое префикс u в строке Python? 7 ответов
Да Короче говоря, я хотел бы знать, почему я вижу u перед моими ключами и значениями.
Я рендеринг формы. Форма имеет флажок для конкретной метки и одно текстовое поле для IP адрес. Я создаю словарь с ключами, являющимися меткой, которые жестко закодированы в list_key, а значения для словаря берутся из ввода формы (list_value). Словарь создается, но ему предшествует u для некоторых значений. вот пример вывода для словаря:
{u'1': {'broadcast': u'on', 'arp': '', 'webserver': '', 'ipaddr': u'', 'dns': ''}}
может кто-то пожалуйста, объясните, что я делаю неправильно. Я не получаю ошибку, когда я имитирую подобный метод в pyscripter. Любые предложения по улучшению кода приветствуются. Благодарить ты
#!/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)
2 ответа:
'u' перед строковыми значениями означает, что строка была представлена как unicode. Буквы перед строками здесь называются "объявлениями кодировки строк". Unicode-это способ представления большего количества символов, чем может управлять обычный ascii.
вы можете конвертировать строку в Юникод несколькими способами:
>>> 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 Ознакомьтесь с документацией
по большей части, вы не должны есть какие-либо ошибки в их обработке, отличные от строк ascii в этом коде.
есть и другие символы, которые вы увидите, такие как "сырой" символ для указания строки не интерпретировать какие-либо специальные символы. Это чрезвычайно полезно при выполнении регулярного выражения в python.
>>> 'foo\"' 'foo"' >>> r'foo\"' 'foo\"'
строки ASCII и Unicode могут быть логически эквивалентны:
>>> bird1 = unicode('unladen swallow') >>> bird2 = 'unladen swallow' >>> bird1 == bird2 True
Это функция, а не ошибка.
см.http://docs.python.org/howto/unicode.html, в частности, раздел "тип Юникода".