Bom dia amigos Achei uma tarefa divertida para o futuro próximo, decidi escrever um "discador" para o Android. O aplicativo irá sincronizar com os contatos no sistema e executar determinadas ações. O que o quoted-printable tem a ver com o que é e por que eu precisava dele - digo no artigo.
Portanto, quoted-printable é um sistema de codificação de texto binário em texto usando caracteres ASCII imprimíveis e, a julgar pela página da versão em inglês da Wikipedia, é usado para codificar / decodificar dados em mensagens de email.
De fato, isso não é inteiramente verdade. Existe esse formato de arquivo - vCard. E é nesse formato que os contatos são importados / exportados de qualquer smartphone Android. Portanto, esse formato (com a extensão .vcf) na versão 2.1 também usa codificação entre aspas imprimíveis. O alfabeto cirílico nessa codificação tem a forma (exemplo): "=D0=9F=D1=80=D0=B8=D0=B2=D0=B5=D1=82"
, ou seja, primeiro, cada caractere cirílico é codificado em UTF-8 em uma sequência de dois bytes e, em seguida, cada byte é gravado na representação hexadecimal com o sinal igual a "=".
E neste formulário, todos os contatos com caracteres cirílicos são importados. É claro que não há questão de ler e editar um arquivo. E é exatamente disso que eu preciso. Eu tentei através de plugins em editores de texto ... Você pode resolver esse problema, sim, mas há muitas manipulações. Em resumo, tive que me sentar para escrever um decodificador.
No processo, encontrei outro problema. O fato é que o padrão de codificação imprimível entre aspas fornece linhas com comprimento máximo de 75 caracteres e, em seguida, produz hífens, duplicando os caracteres "=". Foi necessária uma função adicional para combinar as linhas quebradas.
O script usa o módulo quopri (importei imediatamente, sem instalação).
import quopri import os List_contact = [] File = ".vcf" with open (File) as file:
O resultado do script. Das linhas do formulário:
BEGIN:VCARD VERSION:2.1 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;=D0=90=D0=BD=D0=B4=D1=80=D0= =B5=D0=B9;;; FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=D0=90=D0=BD=D0=B4=D1=80=D0= =B5=D0=B9 TEL;CELL;PREF:80000000000 END:VCARD BEGIN:VCARD VERSION:2.1 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;=D0=92=D0=B8=D0=BA=D1=82=D0= =BE=D1=80 =D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B5=D0=B2=D0=B8=D1=87;;; FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=D0=92=D0=B8=D0=BA=D1=82=D0= =BE=D1=80 =D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B5=D0=B2=D0=B8=D1=87 TEL;CELL;PREF:80000000000 END:VCARD
Temos:
BEGIN:VCARD VERSION:2.1 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;;;; FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE: TEL;CELL;PREF:80000000000 END:VCARD BEGIN:VCARD VERSION:2.1 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:; ;;; FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE: TEL;CELL;PREF:80000000000 END:VCARD
Após editar o arquivo, se necessário, executamos a codificação reversa:
List_contact_2 = [] with open('Contacts_Decode.txt') as file: for i in file: List_contact_2.append(i) with open('_New.vcf', 'w') as file: for i in List_contact_2: Str_1 = bytes(i, 'UTF-8') Str_2 = quopri.encodestring(Str_1) Str_3 = Str_2.decode('UTF-8')
Nisso, de fato, pode-se terminar, mas há mais uma uma piada coisa. Eu achei as linhas codificadas em imprimíveis entre aspas estranhamente semelhantes a alguns URLs que todo mundo provavelmente conheceu na barra de endereços do navegador, apenas em vez do sinal "=" com o sinal "%". Visualizar (exemplo) "%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82"
. E o que você pensaria? Sim sim Aparentemente, isso também pode ser citado para impressão (você precisará perguntar a html-masters). Tudo é decodificado no alfabeto cirílico, conforme descrito acima, desde que "%" seja substituído por "=".
Ah sim. Eu esqueci completamente. Se de repente alguém precisar, os caracteres chineses e as letras árabes são decodificados da mesma maneira que os caracteres cirílicos (verificados pessoalmente).
Bem, isso é tudo, amigos, adeus, talvez seja de pouca utilidade para meus trabalhos.