делает его простым и понятным, у меня есть такая сырая строка, которая является filneme с китайскими иероглифами:?Правильно декодирование мима кодируется именем электронной почты attachament для Юникода объекта
= UTF--B 5л + d56iO5LuT5Y + ? R6LSn5pel5oqlMS4xOS0xLjIxLnhsc3g =
Согласно http://dogmamix.com/MimeHeadersDecoder/, то decoed версия этого выглядит следующим образом:
保税 仓 发货 日报 1.19-1.21.xlsx (который справа)
Я пытаюсь расшифровать это получить нг юникод строки:
u'保税仓发货日报1.19-1.21.xlsx'
Что я делаю это:
Шаг 1:
in_str = '=?utf-8?B?5L+d56iO5LuT5Y+R6LSn5pel5oqlMS4xOS0xLjIxLnhsc3g=?='
from email.header import decode_header
res = decode_header(in_str)
Тогда рес список кортежей следующего вида:
[('\xe4\xbf\x9d\xe7\xa8\x8e\xe4\xbb\x93\xe5\x8f\x91\xe8\xb4\xa7\xe6\x97\xa5\xe6\x8a\xa51.19-1.21.xlsx', 'utf-8')]
Что задает вопрос - почему res [0] [0] является неполным байтом, и частично нормальная необработанная строка («1.19-1.21.xlsx» является сырой пар t строки)? Но продолжим.
Шаг 2.
Давайте декодировать эту байтовую строку из UTF-8, как я считаю, что это UTF-8 строка в кодировке (логично, правда?)
filename = res[0][0].decode('utf-8')
Я считаю, что это должно вернуться следующим юникода строка:
u'保税仓发货日报1.19-1.21.xlsx'
Но я получить другой байтовой строки вместо (на этот раз юникода):
u'\u4fdd\u7a0e\u4ed3\u53d1\u8d27\u65e5\u62a51.19-1.21.xlsx'
Что меня заводит, я считаю, что делаю все правильно.
BTW, да, я прочитал «Unicode HOWTO», до сих пор не знаю, как это исправить.
Эта последняя строка _is_ строка Unicode, а не байтовая строка (которая является простой строкой в Python 2). Эти последние 2 строки Unicode равны: try 'u '保税 仓 发货 日报 1.19-1.21.xlsx' == u '\ u4fdd \ u7a0e \ u4ed3 \ u53d1 \ u8d27 \ u65e5 \ u62a51.19-1.21.xlsx''. И если вы напечатаете любой из них в терминале, который использует UTF-8 и имеет шрифт, который поддерживает эти глифы, вы увидите желаемый результат. Вы также должны получить этот вывод с помощью 'print '\ xe4 \ xbf \ x9d \ xe7 \ xa8 \ x8e \ xe4 \ xbb \ x93 \ xe5 \ x8f \ x91 \ xe8 \ xb4 \ xa7 \ xe6 \ x97 \ xa5 \ xe6 \ x8a \ xa51.19-1.21.xlsx'' –
Вы можете найти эту статью полезной: [Pragmatic Unicode] (http://nedbatchelder.com/text/unipain.html), которая была написана ветеранкой SO Нед Батчелдер. –
@PM 2Ring, ты чертовски прав, спасибо! –