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 Gregplus . Évalué à 1.
quand on dit unicode chez ms c'est de l'utf16
[^] # Re: [PBM UNICODE] Quelqu'un pour me confirmer?
Posté par B r u n o (site web personnel) . Évalué à 1.
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 riba . Évalué à 1.
[^] # Re: [PBM UNICODE] Quelqu'un pour me confirmer?
Posté par B r u n o (site web personnel) . Évalué à 1.
# Re: [PBM UNICODE] Quelqu'un pour me confirmer?
Posté par Raphaël Maurel-Segala . Évalué à 1.
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 B r u n o (site web personnel) . Évalué à 2.
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 Littleboy . Évalué à 2.
# Re: [PBM UNICODE] Quelqu'un pour me confirmer?
Posté par Zenitram (site web personnel) . Évalué à 1.
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 B r u n o (site web personnel) . Évalué à 1.
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 locnet . Évalué à 1.
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 B r u n o (site web personnel) . Évalué à 1.
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 Julien Portalier . Évalué à 2.
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.