Decodificando cabeçalhos RFC 2231

Tentando resolveresse problema, Estou tentando envolver minhas várias funções na biblioteca padrão do Python que visa suportarRFC 2231. O objetivo principal desse RFC parece ser triplo: permitir a codificação não-ASCII nos parâmetros do cabeçalho, observando a linguagem de um determinado valor e permitindo que os parâmetros do cabeçalho abranjam várias linhas. oemail.util biblioteca fornece várias funções para lidar com vários aspectos disso. Tanto quanto eu posso dizer, eles funcionam da seguinte forma:

decode_rfc2231 só divide o valor de tal parâmetro em suas partes, assim:

>>> email.utils.decode_rfc2231("utf-8''T%C3%A4st.txt")
['utf-8', '', 'T%C3%A4st.txt']

decode_params cuida da detecção de parâmetros codificados por RFC2231. Ele coleta partes que pertencem juntas e também decodifica a string codificada em url para uma sequência de bytes. Esta sequência de bytes, no entanto, é então codificada como latin1. E todos os valores são colocados entre aspas. Além disso, há algum tratamento especial para o primeiro argumento, que ainda tem que ser uma tupla de dois elementos, mas esses dois são passados ​​para o resultado sem modificação.

>>> email.utils.decode_params([
...   (1,2),
...   ("foo","bar"),
...   ("name*","utf-8''T%C3%A4st.txt"),
...   ("baz*0","two"),("baz*1","-part")])
[(1, 2), ('foo', '"bar"'), ('baz', '"two-part"'), ('name', ('utf-8', '', '"Täst.txt"'))]

collapse_rfc2231_value pode ser usado para converter este triplo de codificação, linguagem e seqüência de bytes em uma string unicode apropriada. O que me confundiu, no entanto, é o fato de que, se a entrada fosse tão tripla, as citações seriam transportadas para a saída. Se, por outro lado, a entrada for uma única string entre aspas, essas aspas serão removidas.

>>> [(k, email.utils.collapse_rfc2231_value(v)) for k, v in
...  email.utils.decode_params([
...   (1,2),
...   ("foo","bar"),
...   ("name*","utf-8''T%C3%A4st.txt"),
...   ("baz*0","two"),("baz*1","-part")])[1:]]
[('foo', 'bar'), ('baz', 'two-part'), ('name', '"Täst.txt"')]

Então, parece que, para usar todo esse maquinário, eu teria que acrescentar mais um passo para desqualificar o terceiro elemento de qualquer tupla que eu encontrasse. Isso é verdade, ou estou perdendo algum ponto aqui? Eu tive que descobrir muito do que foi dito acima com a ajuda do código-fonte, já que os documentos são um pouco vagos quanto aos detalhes. Eu não posso imaginar o que poderia ser o ponto por trás desta seletiva sem marcação. Existe um ponto para isso?

Qual é a melhor referência sobre como usar essas funções?

O melhor que encontrei até agora é oemail.message.Message implementação. Lá, o processo parece ser mais ou menos o descrito acima, mas todo campo fica sem aspas_unquotevalue depois dedecode_params, e somenteget_filename eget_boundary colapso seus valores, todos os outros retornam uma tupla. Espero que haja algo mais útil.

questionAnswers(2)

yourAnswerToTheQuestion