@Blau
Иногда событие происходило за пределами созданных вами виджетов. например (1) Таймер, который увеличивает «Глобальный счетчик», этот счетчик будет отображаться на многих страницах / виджетах (2) Сообщение, отправленное с сервера сокетов, при получении этого сообщения / события пользователь может находиться где угодно (любые страницы / widgets), и вы не знаете, где 'setState' (или виджета фактически нет там, потому что пользователь не на этой странице)
Я построил 2 примера, которые демонстрируют, как использовать Redux для решить проблемы такого рода:
Пример 1: (использовать многопоточный таймер для установки виджета при запуске внешнего события)
https://github.com / lhcdims / statemanagement01
Пример 2: (Используйте Redux для обновления виджета при запуске внешнего события)
https://github.com/lhcdims/statemanagement02 [ 111]
Демонстрационный снимок экрана:
Используйте встроенную функцию unichr ()
для преобразования числа в символ, затем закодируйте это:
>>> unichr(int('fd9b', 16)).encode('utf-8')
'\xef\xb6\x9b'
Это сама строка. Если вам нужна строка в шестнадцатеричном формате ASCII, вам нужно пройти и преобразовать каждый символ c
в шестнадцатеричный, используя шестнадцатеричный (ord (c))
или аналогичный.
data_from_file='\uFD9B'
unicode(data_from_file,"unicode_escape").encode("utf8")
Python 2.6.2 (r262:71600, Apr 16 2009, 09:17:39)
[GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> u'\uFD9B'.encode('utf-8')
'\xef\xb6\x9b'
>>> s = 'FD9B'
>>> i = int(s, 16)
>>> i
64923
>>> unichr(i)
u'\ufd9b'
>>> _.encode('utf-8')
'\xef\xb6\x9b'
Если длина входной строки кратна 4 (т.е. ваши кодовые точки Юникода UCS-2), затем попробуйте следующее:
import struct
def unihex2utf8hex(arg):
count= len(arg)//4
uniarr= struct.unpack('!%dH' % count, arg.decode('hex'))
return u''.join(map(unichr, uniarr)).encode('utf-8').encode('hex')
>>> unihex2utf8hex('fd9b')
'efb69b'