Journal [PBM UNICODE] Quelqu'un pour me confirmer?

Posté par  (site web personnel) .
Étiquettes : aucune
0
30
mar.
2004
Voilà, j'essaye de lire des fichiers en UTF-8.

Ca marche très bien, sauf avec les fichiers générés par l'intermédiare du NotePad de Windows (et surement d'autres applications qui génèrent des fichiers textes en utf8).

Le pbm c'est qu'il rajoute des caractères exotiques en début de fichier. Ces caractères sont , soit en octets EF BB BF. Ils appellent cela un BOM (byte order mark). Le seul problème, c'est que si on regarde la norme Unicode, il n'y a pas besoin de BOM pour l'utf8, car c'est un encodage qui est traité octet par octet, il n'y a donc pas à se soucier de l'ordre (pas comme l'utf16, utf32). En tout cas ici http://www.unicode.org/unicode/faq/utf_bom.html#37(...) c'est ce qu'ils disent!

Donc je vais devoir me traiter un cas particulier parceque MS ne suit pas la norme et ajoute un pseudo-BOM (qui lui sert surement pour facilement reconnaitre les fichiers utf8), ou bien c'est moi qui comprend mal ?
  • # Re: [PBM UNICODE] Quelqu'un pour me confirmer?

    Posté par  . Évalué à 1.

    tu es sur que notepad écrit bient de l'uf8 ??
    quand on dit unicode chez ms c'est de l'utf16
    • [^] # Re: [PBM UNICODE] Quelqu'un pour me confirmer?

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

      oui, c'est bien de l'utf8. Si je vire le pseudo-bom ca marche.

      Windows bosse en UTF16 en interne (comme java le fait). Et pour notepad, il y a marqué en gros "codage : UTF-8" ;-) Il propose Unicode et UnicodeBE aussi (ca, ca doit etre pour utf16 et utf16be)

      Mais bon, je ne vais pas bosser en utf16... ca double le volume des fichiers
  • # Re: [PBM UNICODE] Quelqu'un pour me confirmer?

    Posté par  . Évalué à 1.

    t'as essayé un recode dessus? (quitte à faire un recode utf8 utf8 un peu dans le genre de la comande de la vie de la mort qui tue ps2ps (bien pratique desfois quand même))
  • # Re: [PBM UNICODE] Quelqu'un pour me confirmer?

    Posté par  . Évalué à 1.

    Je confirme le problème sur ces p*****s de caractères parasites dans les UTF-8 générés par Win. J'ajoute que passer par OpenOffice ne règlera rien.
    La solution que j'ai trouvé consiste à passer par un éditeur capable de coder le texte en UTF-8, mais infoutu de le lire, il s'agit de NotepadPro (IIRC). Plutôt tordu, non ?

    Une deuxième solution pourrait être, par exemple, d'écrire une appli qui sucre automatiquement la première ligne d'un fichier, puis de la lancer sur des fichiers UTF-8 commençant par un saut de ligne, et adieu les caractères àlacon.

    Bon courage, en tout cas !

    signé : un pôv'type qui en a plus que bavé.
    • [^] # Re: [PBM UNICODE] Quelqu'un pour me confirmer?

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

      bin en fait, j'ai approfondie ma recherche sur le site unicode.org et ce n'est pas illégal d'avoir ce BOM :


      Q: Can a UTF-8 data stream contain the BOM character (in UTF-8 form)? If yes, then can I still assume the remaining UTF-8 bytes are in big-endian order?

      A: Yes, UTF-8 can contain a BOM. However, it makes no difference as to the endianness of the byte stream. UTF-8 always has the same byte order. An initial BOM is only used as a signature — an indication that an otherwise unmarked text file is in UTF-8. Note that some recipients of UTF-8 encoded data do not expect a BOM. Where UTF-8 is used transparently in 8-bit environments, the use of a BOM will interfere with any protocol or file format that expects specific ASCII characters at the beginning, such as the use of "#!" of at the beginning of Unix shell scripts.


      Ils previennent bien que ca va foutre la merde, mais c'est pas grave!

      Donc il faut se coltiner ce cas spécial.
  • # Re: [PBM UNICODE] Quelqu'un pour me confirmer?

    Posté par  . Évalué à 2.

  • # Re: [PBM UNICODE] Quelqu'un pour me confirmer?

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

    Q: Is the UTF-8 encoding scheme the same irrespective of whether the underlying processor is little endian or big endian?

    A: Yes. Since UTF-8 is interpreted as a sequence of bytes, there is no endian problem as there is for encoding forms that use 16-bit or 32-bit code units. Where a BOM is used with UTF-8, it is only used as an ecoding signature to distinguish UTF-8 from other encodings — it has nothing to do with byte order.


    Donc ce n'est pas un cas spécial MS, c'est un cas autorisé par la norme.
    Il ne faut pas cracher sur MS quand MS est conforme à la norme... Même si ce conformité est différente de ce que fait Unix!!!

    (perso, j'apprécie dans mes codages, car après savoir si c'est de l'UTF-8 ou du latin-1, hum... comment fais-tu pour détecter?)
    • [^] # Re: [PBM UNICODE] Quelqu'un pour me confirmer?

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

      Bin il existe des algos pour deviner l'encodage du fichier (ce que fait mozilla assez bien d'ailleurs).

      En cherchant "guess charset" dans google notre ami (mais pas sûr qu'il nous veuille toujours du bien) on trouve des infos. Il existe un port de l'algo de Mozilla en java (trouvé sur sf.net, mais pas le lien sous la main, la flemme de chercher).

      Sinon Groovy intègre un "Charset Detector" aussi. En regardant comment il fonctionne : il regarde si il y a un BOM, dans ce cas il retourne le charset unicode correspondant, sinon il considère que c'est de l'utf8 et il parcourt un extrait du fichier jusqu'à rencontrer un caractère qui ne correspond pas à de l'utf8. Si il en trouve un, il retourne le charset par défault (ca vaut ce que ca vaut).

      ps : je n'ai pas craché directement sur MS, je me suis posé la question de savoir si c'etait prévu. Apparement il n'y a qu'eux qui le font. Car ca brise la compatibilité latin/utf8 pour les char <= 127
  • # Re: [PBM UNICODE] Quelqu'un pour me confirmer?

    Posté par  . Évalué à 1.

    Savez-vous comment réagit JAVA à ces BOM ?
    Est-il facile de mettre en string un fichier text UTF* avec un BOM ?

    (Je sais que l'on peut préciser à JAVA l'encodage, mais pour le BOM, je n'ai rien vu.)
    • [^] # Re: [PBM UNICODE] Quelqu'un pour me confirmer?

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

      Justement, je charge les fichiers en java. Faire un InputStreamReader avec de l'UTF-8 ne fait pas sauter le BOM. Apparement Java ne s'attends pas à le trouver. Il faudrait que je regarde sur le site de SUN ce qu'ils en disent

      Dans mon cas concret c'etait pour charger des scripts sql avec la tâche ant sql. J'ai bidouillé la tâche, ca marche. Il serait peut être possible de passer par un filtre, mais je n'ai pas approfondi.
  • # mm pb avec SciTE...

    Posté par  . Évalué à 2.

    Il génère aussi un BOM certainement standard en débu de fichier pour détecter si le fichier est bien en UTF-8, et directement utiliser le mode UT-8 au chragement. Le pb, c'est que les fichiers PHP avec cookies ne passent plus dans ce cas (headers alreay sent) ou encore d'autres joyeusetées.

    La solution ? Faire File > Encoding > 8 Bits et sauvegarder. Le BOM aura disparu et le fichier sera tjs en UTF-8. Magique. Néanmoins ce truc est assez lourdingue quand même.

Suivre le flux des commentaires

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