16. marts 2004 - 22:42Der er
12 kommentarer og 1 løsning
"Dekodning" af filename i POP3 besked
Jeg sidder og roder med at få et C++ (Borland C++ Builder, Win2K)program til hente email fra en POP3 server, og det giver nogle problemer.
Jeg forsøger blandt andet at hente en vedhæftet fil med det originale filnavn "Kære alle derhjemme.doc", men i den datastrøm (som gemmes i en tekstfil) jeg modtager er dette omdøbt til følgende: filename="=?iso-8859-1?B?S+ZyZSBhbGxlIGRlcmhqZW1tZS5kb2M=?="
Hvordan "dekoder" man dette til noget mere normalt ?
int enc_deb64(char c) { switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': return c-'0'+52; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': return c-'A'; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': return c-'a'+26; case '+': return 62; case '/': return 63; case '=': return 0; default: return -1; } return -1; }
void NormalToB64(char *s1,int l1,char *s2,int *l2) { union overlay Cvt; char *p = s1; int ltmp = (l1*8+5)/6; int extra = 3-(ltmp+3)%4; int linlen = 0; (*l2) = 0; // loop through string for(int i=0;i<ltmp;i=i+4) { // convert 8->6 bit Cvt.eigths[2]=(((p-s1)<l1)?(*p):0); p++; Cvt.eigths[1]=(((p-s1)<l1)?(*p):0); p++; Cvt.eigths[0]=(((p-s1)<l1)?(*p):0); p++; s2[*l2]=enc_b64vals[Cvt.sixs.sb4]; (*l2)++; s2[*l2]=enc_b64vals[Cvt.sixs.sb3]; (*l2)++; s2[*l2]=enc_b64vals[Cvt.sixs.sb2]; (*l2)++; s2[*l2]=enc_b64vals[Cvt.sixs.sb1]; (*l2)++; // append newline if line too long linlen=linlen+4; if(linlen>75) { s2[*l2]='\n'; (*l2)++; linlen=0; } } // append 0,1 or 2 "=" (*l2)=(*l2)-extra; for(int j=0;j<extra;j++) { s2[*l2]='='; (*l2)++; } // append newline s2[*l2]='\n'; (*l2)++; return; }
Ok, lige et enkelt spørgsmål mere: En email har emnet: Subject: =?ISO-8859-1?Q?Hej_lilles=F8ster?= ...er det encoded på en anden måde ? Jeg kan i alt fald ikke få base 64 dekoderen til at konvertere den...
Opfølgning: Jeg fandt noget kode på http://www.codeproject.com/string/ammimeutils.asp som automatisk kan detektere kodetypen for subjects/sender felter og decode disse. Mange tak for hjælpen, arne_v, du behøver så ikke finde QuotedPrintable-kode til mig.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.