Существует более одного символа, который похож на точку с запятой. Поскольку вы упомянули '\x03~'
и кодировку utf-16be, вы должны иметь в виду GREEK QUESTION MARK. (Ниже я буду обозначать '\x03~'
как b'\x03~'
сделать этот ответ правильный в обоих python2.7 и Python3.)
In [207]: b'\x03~'.decode('utf-16be')
Out[207]: u'\u037e'
In [208]: import unicodedata as UDAT
In [209]: UDAT.name(u'\u037e')
Out[209]: 'GREEK QUESTION MARK'
In [206]: u'\N{GREEK QUESTION MARK}' == u';'
Out[206]: True
In [198]: u'\N{GREEK QUESTION MARK}'.encode('utf-16be')
Out[198]: b'\x03~'
Таким образом, юникода U + 037E (ГРЕЧЕСКИЙ вопросительный знак), закодированные в UTF-16BE есть b'\x03~'
, а не b'\x03'
.
Обратите внимание, что это не то же самое, как U + 003B (SEMICOLON):
In [211]: u';'.encode('utf-16be')
Out[211]: b'\x00;'
In [212]: UDAT.name(u';')
Out[212]: 'SEMICOLON'
In [214]: hex(ord(u';'))
Out[214]: '0x3b'
In [216]: u'\u003b' == u'\N{SEMICOLON}'
Out[216]: True
In [217]: u'\N{GREEK QUESTION MARK}' == u'\N{SEMICOLON}'
Out[217]: False