Encore des problèmes d'encoding...

olofolof Membre
02:52 modifié dans API AppKit #1
Salut tous !

Dans mon code, je créé un fichier XML. Je construis ce document dans une NSMutableString et j'écris le document de la manière suivante :

<br />NSData *vData = [myStringXML dataUsingEncoding:NSUTF8StringEncoding];<br />[vData writeToFile:@&quot;test.xml&quot; atomically:YES];<br />


Quand j'ouvre ce fichier test.xml dans xCode, les caractères accentués sont illisibles. Si je fais 'Get info' dans le menu contextuel, sous encoding j'ai : No Explicit File Encoding et si je change cette valeur et j'y mets UTF-8, et que je répond 'Reinterpret' à  la question qu'il me pose, tout est ok.

Comment faire pour réellement créer un fichier avec l'encodage UTF-8 depuis Cocoa ???


Merci !

Réponses

  • BruBru Membre
    02:52 modifié #2
    L'encodage d'un fichier n'est mentionné nulle part. Ce n'est que la façon dont certains codes sont interprétés.
    Si tu créés un fichier en utf8, les caractères seront codés en utf8.
    Mais si tu ouvres ce fichier dans un éditeur qui s'attend à  lire du mac-roman, alors les caractères utf8 seront interprétés en mac-roman...

    Xcode, pour les fichiers qu'il gère mémorise l'encodage (au niveau du projet). Par contre, pour les fichiers externes, comme il ne peut connaà®tre l'encodage, alors il prend celui par défaut (voir préférences de Xcode, section Text editing, Default file encoding).

    Donc, ce n'est pas parce que tu vois "mal" dans Xcode que ton fichier est mal encodé.

    Enfin, dans ton cas, il est impératif de mentionner l'encodage au niveau xml.

    .
  • olofolof Membre
    02:52 modifié #3
    Ok, merci Bru.

    J'explique mon cas en deux mots. J'ai une petite appli qui gère ma cave à  vin. Je n'ai pas envie de me prendre la tête pour l'impression alors je me dirige vers un export XML et une transformation XSLT (-> HTML ou PDF). Qu'est-ce que vous me conseillez comme encodage à  utiliser sachant que les caractères "spéciaux" seront des caractères accentués français ?

    ISO-latin-1 (ISO-8859-1) ??? Ou autre ???

    Merci
  • AliGatorAliGator Membre, Modérateur
    02:52 modifié #4
    Export XML --> UTF-8
    C'est pas une obligation mais c'est celui par défaut dans les documents XML, et le plus universel.
    Donc même si ISO-Latin-1 suffirait pour les caractères "spéciaux" que tu as, autant utiliser ceux qui sont utilisés en XML dans 99% des cas.
  • olofolof Membre
    02:52 modifié #5
    Ok, moi je veux bien faire de l'UTF-8, mais quand je le fais comme expliqué dans mon premier post, les caractères accentués sont mal interprétés dans divers logiciels.

    Par exemple, dans mon cas, j'utilise l'application TestXSLT de Marc Liyanage (ici : http://www.entropy.ch/software/macosx/#testxslt). L'affichage du fichier XML ne tient pas compte de l'UTF. Pire, avec le parser Sablotron, ça fait même quitter l'appli... Par contre, en iso-8859-1, tout baigne. Ca fait quand même réfléchir, non ??
  • AliGatorAliGator Membre, Modérateur
    02:52 modifié #6
    Ca fait surtout réfléchir au fait de savoir si tu enregistres correctement tes données en UTF8 :p

    Tu peux mettre un extrait de code pour montrer comment tu construis ton fichier ?
  • olofolof Membre
    02:52 modifié #7
    La méthode utilisée est expliquée dans mon premier post. Mais maintenant, j'y comprends plus rien. J'ai refait des tests en UTF-8 et en ISO-8859-1 et dans les deux cas ça fonctionne... Première vérification, la taille du fichier est différentes (c'est bon signe).
    Deuxième vérification, lecture avec un éditeur hexa-décimal. Les caractères accentués prennent bien deux octets dans la version UTF-8.

    Je pense que j'ai du faire des mauvaises manipulations lors de mes premiers tests... Désolé....

    Merci pour le coup de main !
  • 02:52 modifié #8
    L'encodage pour XML est bien UTF-8.
    Si tu as des pbs d'accents c'est que le fichiers n'a pas été enregistré en UTF-8 et là  c'est plus vraiment ton problème.

    Sinon pour tout ce qui est format TXT, j'encode en ISOLatin1 pour les accents et j'ai toujours pas rencontré de problèmes.
    Pour les fichiers HTML/PHP je fais aussi en ISOLatin1 mais là  ça dépendra de l'encodage aussi choisi dans le navigateur web (par défaut ISOLatin1 pour les français). Enfin au départ y'a un codage HTML des accents (é = &eacute; è = &egrave; etc...) donc si le mec suit pas ça.. c'est plus ton problème non plus.
  • gibet_bgibet_b Membre
    02:52 modifié #9
    Je rencontre aussi des problèmes d'encodage avec les accents...

    Si je fais comme ça :

    texte = [noteAExporter dataUsingEncoding:NSISOLatin1StringEncoding];<br />[texte writeToFile:[MySavePanel filename] atomically:YES];
    


    ça fonctionne sous Smultron (et il me dit bien que l'encodage est de l'ISOLatin1), mais en revanche sur l'iPod, ç'est pas bon.

    Et si je fais ça :

    texte = [noteAExporter dataUsingEncoding:NSUTF8StringEncoding];<br />[texte writeToFile:[MySavePanel filename] atomically:YES];
    


    ça ne passe ni sur Smultron, ni sur l'iPod.

    Alors que si je fais un fichier en ISOLatin1 avec Smultron, ça passe sur l'iPod...

    Là  j'avoue que je sèche.
  • elfelf Membre
    02:52 modifié #10
    dans 1157652946:

    Pour les fichiers HTML/PHP je fais aussi en ISOLatin1 mais là  ça dépendra de l'encodage aussi choisi dans le navigateur web (par défaut ISOLatin1 pour les français). Enfin au départ y'a un codage HTML des accents (é = &eacute; è = &egrave; etc...) donc si le mec suit pas ça.. c'est plus ton problème non plus.


    Les &eacute; n'est pas une notation HTML, mais c'est que c'est des raccourcis XML. Si tu défini ton propre DOCTYPE tu peux créer tes propres raccourcis XML (ils commencent tous par & et finnissent par ;).
Connectez-vous ou Inscrivez-vous pour répondre.