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

Langage Delphi Discussion :

Caractère non UTF-8 toujours présent ?


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut Caractère non UTF-8 toujours présent ?
    Bonjour à tous,

    j'ai un fichier XML que je dois transformer en plusieurs fichiers XML, jusque là rien de très nouveau.

    J'ai un champ "title" et un champ "description" dans le fichier source que je récupère via OmniXML en méthode SAX.

    Je procède de la manière suivante pour écrire mon info dans mon fichier de sortie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                s := '  <field name="ti"><![CDATA[' + UTF8Encode(fTitle) + ']]></field>'+#13;
                fStreamOutPut.Write(PChar(s)^, Length(s));
    Cela fonctionne très bien dans 95% des cas, mais dans 5% j'ai encore des caractères non UTF-8 présent dans mon fichier
    de sortie dans le champ "title" et/ou "Description"

    De ce que je peux voir ce sont les caractères 0080 et 0094 qui ne sont pas virés (ou encodés)

    Y a-t-il un moyen de virer ses caractères définitivement ?

    D'avance merci pour votre aide,

    Cdlt,
    Bruno

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    En regardant le fichier source de plus prêt je m'aperçois que c'est cette ligne qui pose problème (parmi tant d'autres...mais avec les mêmes entités)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <p id="P-0010" num="0010"> DE 100 05 898 A1 describes a thus far unexploited concept&#x2014;referred to as nucleation collision&#x2014;for dispersing cold fog by employing dry ice jets, that is capable of efficiently, i.e. rapidly and cost-effectively, remove cold fog. </p>
    c'est le &#x2014; qui provoque l'erreur.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    j'avance...

    Je stocke le champ description dans un TStringList, serait il possible que cela soit quand je fais le ts.add(str); (où str contient &#x2014 qui pose problème ?
    car je n'ai pas l'impression que cela soit un problème d'encodage utf-8 mais plutôt une conversion pendant le add, qu'en pensez vous ?

    Moi fichier XML source possède bien la ligne <?xml version="1.0" encoding="UTF-8"?>

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    retour en arrière.... la TStringList n'y est pour rien, même chose avec une simple string.

    impossible pour moi de gérer certaines entités html comme cette fameuse

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Est-ce que quelqu'un aurait une fonction pour convertir les Hex Code to Html Entity ?

    cela pourrait résoudre mon problème non ?

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Bon la conversion des entités ne résout pas mon problème....

    je continue

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Je ne connais comment on peut représenter les caractères Unicode en Delphi, mais as-tu testé une moulinette?

    Entrée: 'une chaîne de caractère gentille X#2014; enfin presque' (<- Le X est l'esperluette)
    Sortie: 'une chaîne de caractère gentille' + #2014 + ' enfin presque'

    Ou 'une chaîne de caractère gentille \u2014 enfin presque'

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Salut Foetus,

    j'ai essayé pas mal de moulinettes faites maison comme par exemple:
    remplacer: &#x2014; par --
    mais hélas bizarrement cela n'a aucun effet, comme si il recherchait le _ (mdash) au lieu du &#x2014;
    et pourtant mon fichier source contient bien le text &#x2014;

    je retrouve encore en sortie un caractère non utf-8 qui me plante mon import dans ma base en m'indiquant invalif utf-8...

    je vais déjà chercher pourquoi je n'ai pas le search remplace qui ne fonctionne pas, surement que dans ma TStringList où je stoque ma ligne
    le &#x2014; est converti, ou pas j'en sais plus rien...

    la misère, une journée de perdu pour cette m....

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    c'est bien ça ma ligne un fois lu est stockée déjà avec les _ (mdash) et non le code &#x2014;

    c'est donc omniXML qui traduit direct :

    ' DE 100 05 898 A1 describes a thus far unexploited concept—referred to as nucleation collision—for dispersing cold fog by employing dry ice jets, that is capable of efficiently, i.e. rapidly and cost-effectively, remove cold fog. '

    alors que dans mon fichier source j'ai:

    <p id="P-0010" num="0010"> DE 100 05 898 A1 describes a thus far unexploited concept&#x2014;referred to as nucleation collision&#x2014;for dispersing cold fog by employing dry ice jets, that is capable of efficiently, i.e. rapidly and cost-effectively, remove cold fog. </p>


    Mais alors comment lui dire de me garder la forme &#x2014; ?

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Parce que ton problème est simple X&<code caractère>; ( X est l'esperluette), c'est juste l'échappement XML d'un code Unicode.

    En C/ C++ il y a '\x<code caractère>', '\u<code caractère>' et '\U<code caractère>'
    En Perl, apparemment c'est juste '\x<code caractère>'

    Donc simple. Reste juste à trouver l'échappement Unicode de Delphi.

    Simple, sauf si tu as une merdouille comme omniXML

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    je viens d'utiliser un composant de la suite Alcinoe et j'ai une option ignoreXMLReferences et là je garde bien les &#x2014; que je peux donc garder ou virer ou remplacer,

    je vais creuser cette piste !

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    bien voilà plus d'erreur lors de l'indexation mais bien sûr impossible de faire des recherches dans ma base sur les infos qui contiennent
    des &#x....;

    par exemple:

    je recherche l'auteur "Delev Mötter" mais comme il est indexé sous la forme "Delev M&#xf6;tter" ben je le trouve pas...

    aarrgghht...j'en peux plus de ces codages...

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Non c'est un truc de dév poilu, un vrai

    Il faut, par exemple, que tout l'interne de ton programme manipule de l'UTF-8 et que tu fasses les conversions UTF-8 <-> UTF-16 lorsque tu passes des données à la couche "Windows" (cela peut-être une IHM)

    Dans ton cas, ton "Delev Mötter" devrait est stocké en UTF-8 dans ta base de données, et faire une conversion pour la recherche parce que l'utilisateur saisie un utilisateur en UTF-16.

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    bien pour résoudre le problème, j'ai viré le CDATA du fichier dest que j'importe dans ma base et là c'est tout fonctionne !

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

Discussions similaires

  1. [PL/SQL] Supprimer les caractères non numériques
    Par Oliveuh dans le forum PL/SQL
    Réponses: 6
    Dernier message: 25/06/2015, 12h13
  2. SQL et GUID : Valeur de caractère non valide pour la ....
    Par jackfirst72 dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/03/2007, 10h46
  3. [JDBC]Caractère non-valide
    Par calimero82 dans le forum JDBC
    Réponses: 2
    Dernier message: 16/02/2005, 14h22
  4. [CR] envoyer un caractère non imprimable
    Par nnj dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/07/2004, 08h56
  5. Creation de table, caractère non reconnu
    Par Missvan dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 17/02/2004, 13h28

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