Questo è un esempio e-mail cruda che sto cercando di analizzare:Che cosa significa "= C2 = A0" nel codice MIME, testo quotato e stampabile?
MIME-version: 1.0
Content-type: text/html; charset=UTF-8
Content-transfer-encoding: quoted-printable
X-Mailer: Verizon Webmail
X-Originating-IP: [x.x.x.x]
=C2=A0test testing testing 123
Ciò che è = C2 = A0? Ho provato una mezza dozzina di parser stampabili, ma nessuno lo gestisce correttamente. Come si analizza correttamente questo in C#?
Onestamente, per ora, sto codifica:
//TODO WTF
encoded = encoded.Replace("=C2=A0", "");
Perché io non riesco a capire il motivo per cui il testo è là in modo casuale all'interno del contenuto MIME, e non dovrebbe essere reso in qualsiasi cosa . Semplicemente rimuovendolo, sto ottenendo l'effetto desiderato - ma PERCHÉ ?!
Per essere chiari, so che (= [0-9A-F] {2}) è un carattere codificato. Ma in questo caso, sembra rappresentare NIENTE.
Qual è il modo per analizzare questo in C#? Tutti i parser che ho provato operano su ogni char in modo indipendente, e lo fanno: int iHex = Convert.ToInt32 (hex, 16); char c = (char) iHex; – TheSoftwareJedi
UTF-8 codifica sempre in 2 byte come questo? Posso assumere una corrispondenza di (= [0-9A-F] {2} = [0-9A-F] {2}) invece del singolo byte? Perché diavolo non c'è un parser per questo?!?!?!?! – TheSoftwareJedi
Se si legge su UTF-8, vedrete che ogni valore a byte singolo che supera 7F deve essere codificato in due caratteri, e il primo avrà sempre il suo bit alto impostato. Quindi, sì, A0 è sempre codificato come C2 A0, il che significa che non puoi andare byte per byte. Il modo corretto di gestire UTF-8 con quoted-encoding consiste nel decodificare prima la parte quotata e decodificare l'UTF-8, ottenendo una stringa composta da caratteri a 2 byte (tecnicamente UCS-16 o UTF-16). –