как сказать, является ли строка base64 или нет

Убедитесь, что вы запускаете команду ng serve из корневой папки углового приложения. Если это уже так, то, возможно, попробуйте это:

  • Получите свою угловую текущую версию с ng -v
  • ng update @ angular / cli --migrate-only - из = [угловой версии Cli]

из этой SO потока

6
задан yfeldblum 6 November 2009 в 14:05
поделиться

6 ответов

Отметьте обоих Content-Transfer-Encoding имейте base64

Не релевантный в этом случае, Content-Transfer-Encoding только относится к полезной нагрузке тела, не к заголовкам.

=?gb2312?B?uLGxvmhlbrixsb5nLnhscw==?=

Это - RFC2047-закодированный атом заголовка. Функция stdlib для декодирования его email.header.decode_header. Все еще требуется немного последующей обработки для интерпретации результата той функции хотя:

import email.header
x= '=?gb2312?B?uLGxvmhlbrixsb5nLnhscw==?='
try:
    name= u''.join([
        unicode(b, e or 'ascii') for b, e in email.header.decode_header(x)
    ])
except email.Errors.HeaderParseError:
    pass # leave name as it was

Однако...

Content-Type: application/vnd.ms-excel;
 name="=?gb2312?B?uLGxvmhlbrixsb5nLnhscw==?="

Это просто неправильно. Какая почтовая программа создала его? Кодирование RFC2047 может только произойти в атомах, и заключенная в кавычки строка не является атомом. RFC2047 §5 явно отклоняет это:

  • 'Закодированное слово' не ДОЛЖНО появляться в 'заключенной в кавычки строке'.

Принятым способом закодировать заголовки параметра, когда длинная строка или символы Unicode присутствуют, является RFC2231, который является совершенно новым мешком вреда. Но необходимо пользоваться стандартной анализирующей почту библиотекой, которая справится с этим для Вас.

Так, Вы могли обнаружить '=?' в параметрах имени файла, если Вы хотите и пытаетесь декодировать его через RFC2047. Однако строго говоря корректная вещь сделать состоит в том, чтобы поймать почтовую программу на своем слове и действительно назвать файл =?gb2312?B?uLGxvmhlbrixsb5nLnhscw==?=!

12
ответ дан 8 December 2019 в 02:16
поделиться

@gnud, @edg - Если я не неправильно понимаю, он спрашивает об имени файла, не содержании файла @setori - Content-Trasfer-Encoding говорит Вам, как СОДЕРЖАНИЕ файла кодируется, не "имя файла".

Я не эксперт, но эта часть здесь в имени файла говорит ему о символах, которые следуют:

=? gb2312? B?

Я ищу документацию в RFCs... А-ч!вот: http://tools.ietf.org/html/rfc2047

RFC говорит:

Обычно "закодированное слово" является последовательностью печатаемых символов ASCII, которая начинается "=?", заканчивается"? =, ", и имеет два"? "s промежуточный.

Что-то еще для взгляда на является кодом в SharpMimeTools, синтаксическим анализатором MIME (в C#), что я использую в своем приложении отслеживания ошибок, BugTracker.NET

7
ответ дан 8 December 2019 в 02:16
поделиться

Значение заголовка говорит Вам это:

=?gb2312?B?uLGxvmhlbrixsb5nLnhscw==?=

"=?"     introduces an encoded value
"gb2312" denotes the character encoding of the original value
"B"      denotes that B-encoding (equal to Base64) was used (the alternative 
         is "Q", which refers to something close to quoted-printable)
"?"      functions as a separator
"uLG..." is the actual value, encoded using the encoding specified before
"?="     ends the encoded value

Так разделяя на"?" на самом деле получает Вас это (нотация JSON)

["=", "gb2312", "B", "uLGxvmhlbrixsb5nLnhscw==", "="]

В полученном массиве, если "B" находится на положении 2, Вы сталкиваетесь с основой 64 закодированных строки на положении 3. После того как Вы декодировали его, убедиться обратить внимание на кодирование на положении 1, вероятно, будет лучше преобразовать все это в использование UTF-8 та информация.

21
ответ дан 8 December 2019 в 02:16
поделиться

Ну, Вы анализируете почтовый заголовок в словарь. И затем Вы проверяете, установлен ли Content-Transfer-Encoding, и если это = "base64" или "основа 64".

0
ответ дан 8 December 2019 в 02:16
поделиться

Есть способ лучше, чем метод bobince, для обработки вывода decode_header . Я нашел его здесь: http://mail.python.org/pipermail/email-sig/2007-March/000332.html

name = unicode(email.header.make_header(email.header.decode_header(x)))
2
ответ дан 8 December 2019 в 02:16
поделиться

Question: """Также мне нужно знать тип файла, т.е. .xls или .doc, поэтому мне нужно декодировать имя файла, чтобы правильно обработать вложение, но, как сказано выше, похоже, gb2312 не поддерживается в jython, знаете какие-нибудь обходные пути? """

Данные:

Content-Type: application/vnd.ms-excel;
 name="=?gb2312?B?uLGxvmhlbrixsb5nLnhscw==?="

Наблюдения:

(1) Первая строка указывает на Microsoft Excel, так что .xls выглядит лучше, чем .doc

(2)

>>> import base64
>>> base64.b64decode("uLGxvmhlbrixsb5nLnhscw==")
'\xb8\xb1\xb1\xbehen\xb8\xb1\xb1\xbeg.xls'
>>>

(a) Расширение, похоже, .xls - нет необходимости в gb2312 кодеке
. (b) Если вам нужно безопасное для файловой системы имя файла, вы можете использовать "-_" вариант base64 ИЛИ вы можете закодировать его в процентах
. (c) Если уж на то пошло, имя файла - XYhenXYg.xls, где X и Y - два китайских иероглифа, которые вместе означают "копировать", а остальные - буквальные символы ASCII.

0
ответ дан 8 December 2019 в 02:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: