Я знаю, что проще всего использовать регулярное выражение , но мне интересно, есть ли другие способы сделать эту проверку.
Зачем мне это нужно? Я пишу скрипт Python, который читает текстовые сообщения (SMS )с SIM-карты . В некоторых ситуациях приходят шестнадцатеричные сообщения, и мне нужно выполнить для них некоторую обработку,поэтому мне нужно проверить, является ли полученное сообщение шестнадцатеричным.
Когда я отправляю следующее SMS:
Hello world!
И мой скрипт получает
00480065006C006C006F00200077006F0072006C00640021
Но в некоторых ситуациях я получаю обычные текстовые сообщения (, а не шестнадцатеричные ). Поэтому мне нужно сделать , если шестнадцатеричный .
Я использую Python 2.6.5.
ОБНОВЛЕНИЕ:
Причина этой проблемы в том, что (каким-то образом )сообщения, которые я отправил, принимаются как hex
, а сообщения, отправленные оператором (, информационные сообщения и реклама. )принимаются как обычная строка. Поэтому я решил проверить и убедиться, что у меня есть сообщение в правильном формате строки.
Некоторые дополнительные детали:Я использую модем Huawei 3G и PyHumod для чтения данных с SIM-карты.
Возможное лучшее решение моей ситуации:
Лучший способ обрабатывать такие строки — использоватьa2b_hex
(он жеunhexlify
)иutf-16 big endian encoding
(как упоминал @JonasWielicki):
from binascii import unhexlify # unhexlify is another name of a2b_hex
mystr = "00480065006C006C006F00200077006F0072006C00640021"
unhexlify(mystr).encode("utf-16-be")
>> u'Hello world!'