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

Objective-C Discussion :

Fichier strings XML [Objective-C]


Sujet :

Objective-C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut Fichier strings XML
    Bonjour,

    je cherche a afficher le contenu du fichier "springboard.strings" de mon iphone dans un UIWebview (qui parait plus adapte que UITextview pour du XML). Le probleme c'est que ca s'affiche pas dans le bon format. J'ai essaye plusieurs manieres par des NSString ou NSData avec plusieurs types de MIME mais rien a faire. TextWrangler detecte du XML utf-8 et l'affiche correctement, iFile l'affiche correctement aussi en utilisant "application/x-plist" comme MIME donc c'est possible de le faire.
    Merci pour votre aide.

    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
     
     
     
    NSString filePath = @"/System/Library/CoreServices/SpringBoard.app/French.lproj/SpringBoard.strings";
     
    //NSMutableString *fileContent = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error ];
     
        NSData *data = [[NSData alloc]initWithContentsOfFile:filePath];
        //NSString *string = [data description];
        //NSString *string = [fileContent stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        //NSString *string = [[NSBundle mainBundle] pathForResource:filePath ofType:@"text/html"];
     
     
        webView.dataDetectorTypes = UIDataDetectorTypeAll;  //IBOutlet UIWebView *webView;
     
        [webView loadData:data MIMEType:@"text/html"  textEncodingName:@"UTF-8" baseURL:nil];

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    Citation Envoyé par Piscium Voir le message
    Bonjour,

    je cherche a afficher le contenu du fichier "springboard.strings" de mon iphone dans un UIWebview (qui parait plus adapte que UITextview pour du XML). Le probleme c'est que ca s'affiche pas dans le bon format. J'ai essaye plusieurs manieres par des NSString ou NSData avec plusieurs types de MIME mais rien a faire. TextWrangler detecte du XML utf-8 et l'affiche correctement, iFile l'affiche correctement aussi en utilisant "application/x-plist" comme MIME donc c'est possible de le faire.
    Merci pour votre aide.

    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
     
     
     
    NSString filePath = @"/System/Library/CoreServices/SpringBoard.app/French.lproj/SpringBoard.strings";
     
    //NSMutableString *fileContent = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error ];
     
        NSData *data = [[NSData alloc]initWithContentsOfFile:filePath];
        //NSString *string = [data description];
        //NSString *string = [fileContent stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        //NSString *string = [[NSBundle mainBundle] pathForResource:filePath ofType:@"text/html"];
     
     
        webView.dataDetectorTypes = UIDataDetectorTypeAll;  //IBOutlet UIWebView *webView;
     
        [webView loadData:data MIMEType:@"text/html"  textEncodingName:@"UTF-8" baseURL:nil];
    les fichiers .plist sont parfois sauvegardés dans un format binaire (voir NSPropertyListFormat) qui est décode par les routines adhoc : voir NSPropertyListSerialization

    pour les fichiers .strings il y a aussi propertyListFromStringsFileFormat.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    733
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 733
    Points : 1 119
    Points
    1 119
    Par défaut
    Bonjour,
    J'ai vu des cas où les fichiers .strings sont aussi encodés en UTF-16. C'est le cas où l'on fait des chaines de localisation pour un programme Mac os X.

    Exemple : https://developer.apple.com/library/...id/DTS40009797

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    Citation Envoyé par Tarul Voir le message
    Bonjour,
    J'ai vu des cas où les fichiers .strings sont aussi encodés en UTF-16. C'est le cas où l'on fait des chaines de localisation pour un programme Mac os X.

    Exemple : https://developer.apple.com/library/...id/DTS40009797
    propertyListFromStringsFileFormat tient évidemment compte de l'encoding.

    Et de fait, les fichiers .strings utilisés par NSLocalizedString() DOIVENT être en UTF-16.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    J'ai essaye de comprendre et d'utiliser ces classes mais je m'en sort pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NSData *fileData = [[NSData alloc]initWithContentsOfFile:filePath];
        NSData *data = [NSPropertyListSerialization dataFromPropertyList:fileData format:NSPropertyListXMLFormat_v1_0 errorDescription:nil];
        NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        [webView loadHTMLString:string baseURL:nil];

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    Citation Envoyé par Piscium Voir le message
    J'ai essaye de comprendre et d'utiliser ces classes mais je m'en sort pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NSData *fileData = [[NSData alloc]initWithContentsOfFile:filePath];
        NSData *data = [NSPropertyListSerialization dataFromPropertyList:fileData format:NSPropertyListXMLFormat_v1_0 errorDescription:nil];
        NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        [webView loadHTMLString:string baseURL:nil];
    il serait peut-être malin de récupérer l'erreur au lieu de passer nil pour errorDescription: …

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Le probleme c'est qu'il n'y pas d'erreur sinon ca serait trop facile. La conversion fonctionne mais ca affiche n'importe quoi.

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    Citation Envoyé par Piscium Voir le message
    Le probleme c'est qu'il n'y pas d'erreur sinon ca serait trop facile. La conversion fonctionne mais ca affiche n'importe quoi.
    définissez "'importe quoi" : car en demandant d'interpréter du XML plist par un parser HTML, on doit s'y attendre…

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Voici ce que iFile affiche dans son visualiseur de texte:



    Et ça c'est le n'importe quoi:

    ou



    Sur mon Mac il n'y a que TextWrangler qui reconnait le format:

    xcode:
    [IMG][/IMG]


    TextEdit:

    [IMG][/IMG]

    TextWrangler:
    [IMG][/IMG]

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    Citation Envoyé par Piscium Voir le message
    J'ai essaye de comprendre et d'utiliser ces classes mais je m'en sort pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NSData *fileData = [[NSData alloc]initWithContentsOfFile:filePath];
        NSData *data = [NSPropertyListSerialization dataFromPropertyList:fileData format:NSPropertyListXMLFormat_v1_0 errorDescription:nil];
        NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        [webView loadHTMLString:string baseURL:nil];
    essayer NSUTF16StringEncoding
    et si çà ne marche toujours pas ajouter un NSLog(@"%@",data) et postez le résultat ici.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    NSUTF16StringEncoding = premiere capture d'ecran (symbol chinois)
    NSUTF8StringEncoding = deuxieme capture d'ecran (n'importe quoi)

    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
     
     
        NSData *fileData = [[NSData alloc]initWithContentsOfFile:filePath];
        NSString *erreur;
        NSData *data = [NSPropertyListSerialization dataFromPropertyList:fileData format:NSPropertyListXMLFormat_v1_0 errorDescription:&erreur];
        NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF16StringEncoding];
        [webView loadHTMLString:string baseURL:nil];
     
        if(erreur)
        {
            UIAlertView *alert = [[UIAlertView  alloc]initWithTitle:@"ALERT" message:erreur delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alert show];
        }
     
        NSLog(@"%@",data);
    Le log est trop long pour le forum, je le met en pj.
    Fichiers attachés Fichiers attachés
    • Type de fichier : doc log.doc (279,5 Ko, 103 affichages)

  12. #12
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    [QUOTE=Piscium;6150906]
    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
        
        NSData *fileData = [[NSData alloc]initWithContentsOfFile:filePath];
        NSString *erreur = nil ;
        NSData *data = [NSPropertyListSerialization dataFromPropertyList:fileData format:NSPropertyListXMLFormat_v1_0 errorDescription:&erreur];
        NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF16StringEncoding];
        [webView loadHTMLString:string baseURL:nil];
        
        if(erreur)
        {
            UIAlertView *alert = [[UIAlertView  alloc]initWithTitle:@"ALERT" message:erreur delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alert show];
        }
        
        NSLog(@"%@",data);
    Attention : TOUJOURS initialiser ce paramètre à nil !
    pour toutes les méthodes de Cocoa qui renvoient une erreur via un paramètre passé par adresse dans une NSString ou dans une NSError.

  13. #13
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    Citation Envoyé par Piscium Voir le message
    NSUTF16StringEncoding = premiere capture d'ecran (symbol chinois)
    NSUTF8StringEncoding = deuxieme capture d'ecran (n'importe quoi)
    la string contient bien de l'UTF-8 et ce qu'elle affiche est bien le contenu des champs XML et non pas n'importe quoi comme vous le prétendez :

    simplement votre plist contient un beau <data> (des données binaires donc) qui évidemment est "encodé" (genre uuencode, base64, …) pour pouvoir être mis dans un fichier XML sous forme de string ASCII.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    Attention : TOUJOURS initialiser ce paramètre à nil !
    pour toutes les méthodes de Cocoa qui renvoient une erreur via un paramètre passé par adresse dans une NSString ou dans une NSError.
    Ok c'est note.


    Citation Envoyé par JeitEmgie Voir le message
    la string contient bien de l'UTF-8 et ce qu'elle affiche est bien le contenu des champs XML et non pas n'importe quoi comme vous le prétendez :

    simplement votre plist contient un beau <data> (des données binaires donc) qui évidemment est "encodé" (genre uuencode, base64, …) pour pouvoir être mis dans un fichier XML sous forme de string ASCII.
    Merci pour l'analyse je vais chercher de ce cote la

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Finalement grace a toutes vos explications j'ai fini pour trouver dans la doc un autre moyen tres efficace:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    NSData *data = [[NSFileManager defaultManager] contentsAtPath:filePath];
        NSString *erreur = nil;
        NSPropertyListFormat format;
        NSDictionary *dico = (NSDictionary *)[NSPropertyListSerialization
     
                                              propertyListFromData:data
     
                                              mutabilityOption:NSPropertyListMutableContainersAndLeaves
     
                                              format:&format
     
                                              errorDescription:&erreur];
        [webView loadHTMLString:[dico description] baseURL:nil];
    Merci JeitEmgie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème caractère % dans le fichier strings.xml
    Par albubus dans le forum Android
    Réponses: 2
    Dernier message: 07/10/2011, 16h55
  2. [TOMCAT] parametrage du fichier web.xml
    Par sebos63 dans le forum Tomcat et TomEE
    Réponses: 12
    Dernier message: 06/05/2010, 12h09
  3. [PHP-JS] Ecrire un fichier xml avec un string XML
    Par bobic dans le forum Langage
    Réponses: 1
    Dernier message: 22/12/2006, 14h18
  4. [String -> XML]
    Par JustAGphy dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 30/04/2004, 18h08
  5. [TomCat][sécurité]config fichier web.xml
    Par liomac dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 24/09/2003, 15h46

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