2013-11-09 3 views
1

У меня естьстроки Unicode в Python

(Pdb) email 
'\x00t\x00e\x00s\x00t\[email protected]\x00g\x00m\x00a\x00i\x00l\x00.\x00c\x00o\x00m\x00' 
(Pdb) print email 
[email protected] 

Мне нужно проверить ли значение Thie является формат электронной почты, однако, как я могу преобразовать эту строку в реальную строку ASCII?

ответ

2

Похоже, что он кодируется кодировкой utf-16.

>>> '\x00t\x00e\x00s\x00t\[email protected]\x00g\x00m\x00a\x00i\x00l\x00.\x00c\x00o\x00m\x00'.decode('utf-16') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python27\lib\encodings\utf_16.py", line 16, in decode 
    return codecs.utf_16_decode(input, errors, True) 
UnicodeDecodeError: 'utf16' codec can't decode byte 0x00 in position 28: truncated data 

и укороченный:

>>> '\x00t\x00e\x00s\x00t\[email protected]\x00g\x00m\x00a\x00i\x00l\x00.\x00c\x00o\x00m\x00'[1:].decode('utf-16') 
u'[email protected]' 

>>> '\x00t\x00e\x00s\x00t\[email protected]\x00g\x00m\x00a\x00i\x00l\x00.\x00c\x00o\x00m\x00'[1:].decode('utf-16-le') 
u'[email protected]' 
>>> '\x00t\x00e\x00s\x00t\[email protected]\x00g\x00m\x00a\x00i\x00l\x00.\x00c\x00o\x00m\x00'.decode('utf-16-be', 'ignore') 
u'[email protected]' 
+1

Усеченные в одном или другом направлении; маленький конец или большой конец. –

+0

Если я должен был догадаться об усечении, я бы обвинил что-то, разделяющее пробелы. Кодировка UTF-16 символа пробела будет '' \ x00 ''или' '\ x00'' в зависимости от порядка байтов, который будет« разбить »прямо. Разумеется, любые другие ascii-пробелы. Вы не можете безопасно разбить закодированную байтовую строку, особенно не UTF-16. 'strip' имеет аналогичный потенциал, чтобы калечить вещи. –

Смежные вопросы