Forum Programmation.shell sed et les accents

Posté par  .
Étiquettes : aucune
0
13
avr.
2005
Yep à tous,

Je vous explique mon pb :
Mon serveur récupère à heure fixe un flux XML, il le parse et le rentre dans une base de donnée.
Le problème est qu'il me foire tout les accents, par exemple :
Combiné devient Combiné
J'ai donc fait un petit fichier de règle avec sed pour lire le flux et virer tout les accents afin de les coder en HTML, pour obtenir :
Combiné devient Combiné
Mais sa ne marche pas, voila a la suite du sed ce que j'ai dans ma base : Combinéeacute;
Arf....
Donc je vous joins mon fichier de règles sed, dites moi comment faire soit pour faire marcher sed, ou tout simplement pour résoudre mon problème!

Merci d'avance à tous.

Fichier de régle sed :

#!/usr/bin/sed -f
# Table de transcodage de ISO-8859-1 vers HTML
# Fichier "regle.sed"
s/É/É/g
s/È/È/g
s/Ê/Ê/g
s/Ë/Ü/g
s/À/À/g
s/Á/Á/g
s/Â/Â/g
s/Ç/Ç/g
s/Û/Û/g
s/Ü/Ü/g
s/é/é/g
s/è/è/g
s/ê/ê/g
s/à/à/g
s/á/á/g
s/â/â/g
s/ç/ç/g
s/ô/ô/g
  • # Re

    Posté par  . Évalué à 1.

    En fait je viens de détailer, et aprés le passage de sed sur mon fichier,
    il me transforme :
    spécial en spéeacute;cial
    au lieu de me faire :
    spécial en spécial

    Voila ce que j'aimerais arranger!
    Merci.
    • [^] # Re: Re

      Posté par  . Évalué à 1.

      et merde alors je viens de capter qu'il interpretait le HTML alors 3éme version de mon post, je vais y arriver !

      Regle.sed :

      #!/usr/bin/sed -f
      # Table de transcodage de ISO-8859-1 vers HTML
      # Fichier "regles.sed"
      s/É/É/g
      s/È/È/g
      s/Ê/Ê/g
      s/Ë/Ü/g
      s/À/À/g
      s/Á/Á/g
      s/Â/Â/g
      s/Ç/Ç/g
      s/Û/Û/g
      s/Ü/Ü/g
      s/é/é/g
      s/è/è/g
      s/ê/ê/g
      s/à/à/g
      s/á/á/g
      s/â/â/g
      s/ç/ç/g
      s/ô/ô/g


      En fait je viens de détailer, et aprés le passage de sed sur mon fichier,
      il me transforme :
      spécial en spéeacute;cial
      au lieu de me faire :
      spécial en spécial
      • [^] # Re: Re

        Posté par  (site web personnel) . Évalué à 1.

        sed 's/é/\é/g'
        ça devrait le faire
        il faut rajouter un \ devant &
        • [^] # Re: Re

          Posté par  . Évalué à 1.

          Bon j'ai fait ta modif et sa roule à moitié !
          Dans mon fichier XML j'ai bien pour Combiné : Combiné
          Ce qui est bon mais apres quand je le parse avec sablotron pour le rentrer dans ma base de donnée, voilà ce qu'il me met : Combin&eacute
          Comment puis-je corriger cela car je pense que lorsque je vais vouloir afficher les champs de ma base de donnée il y aura boulette !?
          • [^] # Re: Re

            Posté par  (site web personnel) . Évalué à 2.

            Ce qui tendrait à dire que convertir vers l'HTML est un peu balot, si le but n'est pas uniquement d'être affiché en HTML n'est-ce pas ?

            Il faut juste que ton "parseur" lise l'entête du fichier XML décrivant le codage utilisé, et fasse une convertion vers le codage attendu par ta base de donnée (ou le driver que tu utilises pour y accéder).

            En ligne de commande tu as `iconv' pour faire cette conversion.
  • # Unicode !

    Posté par  . Évalué à 1.

    Salut,

    Apparemment tes données XML sont codées en Unicode (UTF8) et pas en iso-8859-1. Cela explique que lorsque tu visualises la lettre é tu vois é (é est codé en UTF8 sur deux octets, mais tu visualises en considérant que c'est de l'iso-8859-1 et tu vois donc 2 caractères).

    Il existe, à mon avis, deux solutions à cela :
    - tu paramètres ta base de données (ou uniquement la table qui va bien) pour lui dire que les champs texte sont en UTF8.
    - tu convertis tes données XML en iso-8859-1 (avec un outil comme iconv).
    Dans les deux cas, il n'est pas forcément nécessaire de coder ensuite en HTML (mais il y a peut être d'autres contraintes).

    @+
    JJD
    • [^] # Re: Unicode !

      Posté par  . Évalué à 1.

      OK, mais comment dire qu'un champ texte est en UTF8 ???
      Ma base de donnée est en MYSQL donc je ne vois pas UTF8, idem pour ma table, je peux choisir :
      MyISAM
      HEAP
      ISAM
      MERGE

      Si tu as eu idée dit moi !
      Merci.
      • [^] # Re: Unicode !

        Posté par  . Évalué à 1.

        Ce n'est pas au niveau du type de tables que cela est défini, mais au moment de la création de tes tables.
        Quand tu crées la table concernée, dans la définition de ton champ tu déclares quelque chose du genre :
        CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 );

        Ceci est valable pour les versions récentes de mysql (>=4.1).

        Il me semble que l'on peut également préciser la chose ainsi :
        CREATE TABLE t (c CHAR(20) UNICODE );

        je te conseille tout de même d'aller voir les documentations mysql pour plus de précisions (par exemple sur http://www.nexen.net/(...) )

        JJD
  • # MERCI A TOUS

    Posté par  . Évalué à 1.

    Merci à tous, j'ai appliquer un peu de vos deux méthodes et sa marche !
    J'ai encoder mon fichier xsl en iso-8859-1 de manière à garder le même format que mon fichier xml.
    Plus le \& sa roule !!!
    Donc merci à tous !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.