Journal Petit outil pour changer de charset et d'encodage

Posté par  (site web personnel) .
Étiquettes : aucune
0
14
jan.
2005
Salut,

Je ne sais pas si vous avez aussi ce genre de problème, mais moi j'avais de plus en plus souvent besoin d'outil pour passer de l'ISO-8859-1 à l'UTF-8 (dans les deux sens), ou encore encoder une chaîne au format url, html, ou encore décoder une chaîne au format base64. J'ai donc écrit un petit outil pour ça :

http://www.haypocalc.com/prog/encodage.php#outil_reencodage(...)

On peut choisir le charset d'entrée et de sortie, ainsi que l'encodage en entrée et en sortie. Ce qui supporté pour l'instant :
- charset : iso-8859-1 ou utf-8
- encodage d'entrée : texte brut, url, html, base64, hexadécimal
- encodage de sortie : texte brut, url, html, entités html (transforme également les lettres accentuées par ex.), quoted-printable (utilisé dans l'envoi d'email par ex.), base64 et hexadécimal

Si vous êtes intéressé par l'outil, je peux vous envoyer les sources (c'est du PHP), ou je peux ajouter de nouveaux charset / encodages.

Sinon, dans le domaine des encodage du texte, on peut aussi noter :

- l'outil iconv en ligne de commande qui permet de changer de charset très facilement : echo "accentué" | iconv -f iso-8859-1 -t utf-8

- Utrac : Outil qui permet de reconnaître un charset
http://linuxfr.org/~calandoa/16251.html(...)

J'espère que cet outil pourra vous être utile un jour ou l'autre.

@+ Haypo
  • # Recode

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

    Il existe aussi recode.

    Package: recode
    Priority: optional
    Section: text
    Installed-Size: 644
    Maintainer: Santiago Vila <sanvila@debian.org>
    Architecture: i386
    Version: 3.6-10
    Depends: libc6 (>= 2.2.4-4), librecode0 (>= 3.6)
    Filename: pool/main/r/recode/recode_3.6-10_i386.deb
    Size: 178394
    MD5sum: c050005a97ae82dd2a322a54fc0be4a9
    Description: Character set conversion utility
    Free `recode' converts files between character sets and usages. When
    exact transliterations are not possible, it may get rid of the
    offending characters or fall back on approximations. This program
    recognizes or produces nearly 300 different character sets and is able
    to transliterate files between almost any pair. Most RFC 1345
    character sets, and all `libiconv' character sets, are supported.
    • [^] # Re: Recode

      Posté par  . Évalué à 3.

      et convmv sous sarge
      • [^] # Re: Recode

        Posté par  . Évalué à 3.

        convmv = mv + iconv
    • [^] # Re: Recode

      Posté par  . Évalué à 3.

      Quelques liens sur des outils de reconnaissance et conversion :
      http://utrac.sourceforge.net/links.html(...)

      Il y a notamment http://www.volny.cz/vorisekd/test.htm(...) qui fait un benchmark d'une multitude de convertisseurs en kilobajt za sekundu (bin oui, c'est du tchèque...).
      On peut quand même se demander si c'est franchement utile de tester la vitesse de ces outils... c'est pas franchement le genre d'opération qui plombe le système :^).

      (et Utrac 0.3 dans les bacs la semaine prochaine!)
  • # Encodages supportés par une police de caractères

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

    Tant qu'on y est, vous ne connaitriez pas un outil permettant de lister les encodages supportés par une police de caractères (au sens « la police contient les glyphes nécessaires pour tel encodage »), et éventuellement le nombre de caractères manquant pour un encodage donné ?

    mkfontscale ne trouve pas tous les encodages, par exemple, mais c'est peut-être juste sa configuration qui est à améliorer.
  • # iconv

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

    Voir aussi iconv (qui ne prend en compte que le transcodage entre charsets, pas le reste de tes fonctionnalités).
  • # Il vaut mieux utiliser un outil en ligne de commande

    Posté par  . Évalué à 5.

    Non pas que je doute de la fiabilité de ton outil, mais plus généralement de la fidélité d'un texte qui transite par un formulaire web. Par exemple, Mozilla 1.x (et peut-etre bien Firefox) est notoirement connu pour transformer les espaces insécables en espace simples.
  • # cool et en perl ?

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

    j'avais trouvé les liens suivants
    http://rf.net/~james/perli18n.html(...) [en] Faq for utf-8
    http://userpage.fu-berlin.de/~ram/pub/pub_w33d45lg/perl_unicode_en(...) [en] use unicode in perl
    http://perl-xml.sourceforge.net/faq/#encodings(...) [en] unicode utf-8 with perl / xml

    En fait, j'ai lu que la valeur de charset pour iconv dépendait du système, donc si quelqu'un a une URL avec une liste ça m'intéresse, histoire de mettre l'encodage qui va bien dans les pages HTML.

    Sinon j'ai pas trop compris pourquoi ne pas stocker en utf-8 en base et mettre un encodage en utf-8 pour la page html envoyée côté client ? ça permettrait d'éviter le souci lorsqu'on affiche du Français, de l'Estonien et du Grec sur la même page non ? y-a-t-il un problème lié aux fontes disponibles côté client ?

    Ce que j'ai plutôt vu, c'est :
    côté client / côté serveur / en base
    encodage locale / transformation utf-8 <=> locale / utf-8
    mais je n'ai pas forcément (encore) compris pourquoi...

    dans man perluniintro et man perlunicode il y a quelques infos pertinentes (si ce n'est que la comparaison incessante entre ce qui se passe en perl 5.6 et perl 5.8 est pénible à lire dans le texte, voire m'amène à tout confondre :-( ) :
    How Do I Display Unicode? How Do I Input Unicode?

    See http://www.alanwood.net/unicode/(...) and
    http://www.cl.cam.ac.uk/~mgk25/unicode.html(...)
  • # chinois français en latex

    Posté par  . Évalué à 2.

    Bon puisqu'on parle d'encodage... Je voudrais savoir si quelqu'un à une solution sous la main pour faire un texte essentiellement en français mais contenant quelque bouts chinois en latex. J'ai essayé bcp de solutions et j'ai pu obtenir:
    1) Belles fontes chinoises (cyberbit) mais plus de coupure juste des mots contenant un accent en français
    2) Fontes trop petites et français parfait.

    Dans tous les cas, le texte est codé en UTF-8

    Si personne n'a de solution toute prête alors je détaillerai plus mes essais :-) Merci.
    • [^] # Re: chinois français en latex

      Posté par  . Évalué à 1.

      je suis intéressé aussi, j'ai essayé un peu, et je n'ai jamais réussi à obtenir ne serait-ce qu'autant que toi...

      Tu pourrais m'expliquer comment tu as fait ?
  • # renommage de fichiers

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

    j'avais également écrit un micro-script en Python pour effectuer le renommage en masse des noms de fichiers.

    Si ça peut servir aussi :
    http://ccomb.free.fr/wiki/wakka.php?wiki=UtfConvert(...)
  • # esperluette

    Posté par  . Évalué à 2.

    'et commercial' ou '&' se dit en français 'esperluette', c'est plus mignon :-) Merci en tk ton outil me sera utile.
    • [^] # [HS Total] esperluette

      Posté par  . Évalué à 2.

      Amusant, ces sites appartiennent à France Telecom
      www.esperluette.fr
      www.esperluette.net
      www.esperluette.com
      www.esperluette.org
  • # Support des encodages quoted printabled

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

    Hop hop hop, j'ai ajouté le support des encodages quoted printable avec ou sans préfixe (respectivement utilisé dans les entêtes et le corps d'un email). Bon, je suis pas encore tout à fait satisfait du résultat (avec préfixe) car il y a des espaces qui trainent. Or je crois bien qu'ils devraient être supprimés.

    @+ Haypo
    • [^] # Re: Support des encodages quoted printabled

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

      Et puis tant qu'à faire j'ai ajouté les encodages "HTML décimal" (du style &#42;) et "HTML hexadécimal" (&#x42). Ceci fonctionne également avec le changement de charset iso-8859-1 -> utf-8. J'ai découvert au passage que "é" est le code Unicode 233 en iso et 233 en UTF-8 ! (si c'est affiché \xC3\xA9, c'est parce UTF-8 ajoute des bits de "contrôle" (je vais pas entrer dans les détails ici)).

      L'encodage en hexadécimal se fait maintenant avec le préfixe "\x", c'est plus clair comme ça.

      Bon, l'outil devrait être repensé pour mieux gêrer les charset autre que iso-8859-1 et UTF-8, mais c'est déjà pas mal comme ça ;o)

      Enfin, j'ai traité à part le cas du caractère euro (¤), qui vaut a le code iso-8859-15 : 128. Or le code Unicode correct est 8364, j'ai donc fait un vilain hack pour traiter pour les encodages en HTML hexadécimal/décimal.

      Haypo
      • [^] # Re: Support des encodages quoted printabled

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

        J'ai découvert au passage que "é" est le code Unicode 233 en iso et 233 en UTF-8 ! (si c'est affiché \xC3\xA9, c'est parce UTF-8 ajoute des bits de "contrôle" (je vais pas entrer dans les détails ici)).

        Tu n'as manifestement pas compris l'encodage UTF-8. Le "é" c'est bien le caractère Unicode n°00E9 (soit 233 en décimal, c'est volontaire, les 256 premiers caractères d'Unicode reprennent l'ISO-8859-1), et il se code C3 A9 en UTF-8, point final. (Mais d'où sors-tu ton second 233 ?!)

        Pour information, les caractères Unicode de 0000 à 007F se codent sur un octet en UTF-8, les caractères de 0080 à 07FF se codent sur deux octets, les caractères de 0800 à FFFF se codent sur trois octets. (Et ainsi de suite pour les autres caractères, on peut monter jusqu'à six octets de cette manière.)

Suivre le flux des commentaires

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