В Python, как вы справляетесь с другими кодировками в доменных именах

1

Я пытаюсь разобрать имена доменов из поля Message-ID электронного письма, загруженного из файла, и сравнить его с доменом поля from, чтобы узнать, насколько он соответствует. Затем я сравниваю расстояние, используя nltk.edit_distance().

Я использую

re.search('@[\[\]\w+\.]+',mail['Message-ID']).group()[1:]

но одно спам-сообщение имеет следующее

mail2['Message-ID']
'<2011315123.04C6DACE618A7C2763810@\x82\xb1\x82\xea\x82\xa9\x82\xe7\x8c\xa9\x82\xa6\x82\xe9\x82\xbe\x82\xeb\x82\xa4>'

Поэтому, когда я пытаюсь совместить это, он не возвращает совпадение в group()

Я могу расшифровать его в Shift_JIS, но не знаю, что с ним делать. <2011315123.04C6DACE618A7C2763810@これから見えるだろう>

Я не хочу пытаться проверять все возможные кодировки символов.

Любые идеи о том, что мне с этим делать?

Теги:
string
string-literals
email-spam

1 ответ

1
Лучший ответ

Вы можете попробовать проект chardet, в котором используется алгоритм для угадывания кодировки символов:

import chardet

text = '<2011315123.04C6DACE618A7C2763810@\x82\xb1\x82\xea\x82\xa9\x82\xe7' + \
    '\x8c\xa9\x82\xa6\x82\xe9\x82\xbe\x82\xeb\x82\xa4>'
cset = chardet.detect(text)
print cset
encoding = cset['encoding']
print encoding, text.decode(encoding)

Вывод:

{'confidence': 1, 'encoding': 'SHIFT_JIS'}
SHIFT_JIS <2011315123.04C6DACE618A7C2763810@これから見えるだろう>
  • 0
    Спасибо, я буду иметь это в виду, если мне когда-нибудь понадобится сделать что-то подобное снова, но я собираюсь использовать более простое решение - использовать значения repr (my_string), чтобы заставить его перейти в ascii, а затем удалить \.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню