IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Fonction Quoted printable qui ne fonctionne pas.


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    49
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 49
    Par d�faut Fonction Quoted printable qui ne fonctionne pas.
    Bonjour,
    Voila j'ai une fonction en C pour coder en coder en quoted printable une chaine de caracteres. Or elle me donne ce resultat dans ma console :
    Texte : � � � �
    Texte quoted-printable : =C3=A0 =C3=A9 =C3=A8 =C3=A7

    Or les resultats qui sont afficher par des encoder en ligne sur le net sont (affich� sur un navigateur web):
    =E0 =E9 =E8 =E7

    On remarque la similitude entre les valeurs apres les A et les E.
    Voici mon cs :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <limits.h>
     
    char * enc_quotedP(char const * string) {
    	char * textqp = NULL;
    	if (string) {
    		fprintf(stdout,"Taille de string : %lu\n",(unsigned long)strlen(string));
    		textqp = malloc(3*strlen(string)+1);
    		if (textqp) {
    			int i=0, j=0;
    			unsigned char c = 0u;
    			char qp_char[3+1] = { '\0' };
    			while(*(string + i) !='\0') {
    				if (*(string + i) >= 0  && *(string + i) < SCHAR_MAX) {
       					*(textqp + j) = *(string + i);
    					 ++j;
    				}
    				else {
    					c = *(string + i);
    					sprintf(qp_char, "=%02X", c);
    					strcat(textqp, qp_char);
    					j+=3;
    				}
     
    			++i;
    			}
    		}
    		else {
    			fprintf(stderr,"Erreur de Malloc\n");
    		}
    	}
    	return textqp;
    }
     
     
    int main(void) {
    	char * texteQP = NULL; 
    	char const * texte; 
    	texte = "Les accents : à é è ç"; 
    	texteQP = enc_quotedP(texte);
    	if (texteQP) {
    		fprintf(stdout,"Texte : %s\nTexte quoted-printable : %s\n",texte, texteQP);
    	}
    	else {
    		fprintf(stderr,"Conversion texte -> texteQP a echoue\n");
    	}
    	return 0;
    }
    Merci de votre aide,
    Ciao,

  2. #2
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Sois attentif au fait que, dans les URL, les valeurs "inhabituelles" (tout ce qui est caract�res sp�ciaux et accentu�s) sont, tout simplement, fournies en hexad�cimal...

    Ainsi, C3 vaut... 195 l� ou D3 vaut...212 et singifient, *simplement* "le caract�re qui se trouve � la position (195 ou 212) dans la table de caract�res utils�s (ASCII, UBCDIC, UTF*,...)"

    Tu ne dois donc pas uniquement te baser sur la valeur "3", mais, bel et bien, sur la valeur hexad�cimale C3 ou D3 selont le principe que tu trouveras
    indicateur debut || valeur 4 bits poid fort || valeur 4 bits poid faible || indicateur fin

    Ta fonction enc_quotedP doit donc
    • supprimer l'indicateur de debut
    • supprimer l'indicateur de fin (s'il existe)
    • utiliser les deux valeurs restantes (qui seront chacune comprises entre 0 et F) comme index dans la table de caract�res utils�es


    Typiquement, tu peux envisager une formule du genre de
    caract�re=<valeur 4 bits poid fort>*16+<valeur 4 bits poids faible>

    EDIT Attention au fait qu'il s'agit bel et bien de valeur num�rique telle que
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    in | reel
    0    0
    1    1
    ...  ...
    9    9
    A    10
    B    11
    C    12
    D    13
    E    14
    F    15
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  3. #3
    Membre chevronn� Avatar de Lunixinclar
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Par d�faut
    Salut,
    J'ajoute qu' ici
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    textqp = malloc(3*strlen(string)+1);
    Le malloc alloue toujours le triple de la longueur initiale: faux. Il faut allouer 3 caract�res SI le char doit �tre encod�.
    Par cons�quent, parcourir une premi�re fois la cha�ne (SANS strlen), si le char analys� doit �tre encod� alors len+=3 sinon len+=1. Puis malloc(len+1).

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 41
    Par d�faut
    Le probleme est que ta console utilise l'encodage UTF-8 et ton browser le ISO-8859. L'encodage ASCII ne comporte pas les characteres accentues, et mon clavier anglais non plus.

    Sous linux la commande iconv permet de convertir entre different encodages:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    iconv -f UTF-8 -t ISO-8859-1
    Et la commande file permets de detecter l'encodage utilise.

Discussions similaires

  1. R�ponses: 2
    Dernier message: 27/09/2013, 09h40
  2. R�ponses: 2
    Dernier message: 07/01/2013, 11h08
  3. [javascript]fonction qui ne fonctionne pas(concernant div)
    Par ranell dans le forum G�n�ral JavaScript
    R�ponses: 12
    Dernier message: 19/04/2007, 17h38
  4. [Javascript] Fonction qui ne fonctionne pas sous Opera et Safari
    Par frechy dans le forum G�n�ral JavaScript
    R�ponses: 5
    Dernier message: 20/02/2007, 10h04
  5. Fonction While {} qui ne fonctionne pas
    Par zoom61 dans le forum Langage
    R�ponses: 3
    Dernier message: 15/11/2006, 12h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo