Phiew, si ça continue on va m'appeler M. Charset. Mais cette notion m'a pris du temps à comprendre, donc si je pouvais faire gagner du temps de compréhension aux gens qui liront mes billets, j'en serais heureux.
J'ai créé une petite page contenant la table des trois charsets les plus courants pour les langues occidentales :
Vous aurez ainsi un aperçu des caractères disponibles pour chaque charset, avec leur code associé (en hexadécimal). Pour voir la table Unicode, je me permets de faire un lien vers celle d'Anubis.
Les cases qui contiennent le sigle « NC » indiquent qu'il n'y a pas de caractère associé (Not a Character).
Une personne est arrivée sur mon site en faisant une recherche de « afficher latin-1 console windows ». Effectivement il y a tous ces mots sur mon site, malheureusement je ne réponds pas à la question. Je vous livre donc quelques petites explications et le truc pour y arriver, d'autant plus que j'ai mis plusieurs années avant de comprendre :) (les linuxiens vont bien se marrer encore une fois :))
Quand on lance une fenêtre console sous un Windows occidental, une vraie, à l'aide de la commande « cmd » (par exemple via le menu Démarrer / Exécuter), cette fenêtre utilise l'encodage OEM, un vieux charset des familles différent de celui utilisé ailleurs dans Windows, à savoir le charset windows-1252.
De ce fait, les chaines écrites en windows-1252 ne donnent pas de très bon résultats une fois affichées dans la fenêtre console (par exemple un printf d'un programme C++, ou l'affichage d'un fichier dans la console).
Pour changer ce comportement, voici les étapes à suivre :
Voilà, vous savez désormais comment rendre cohérent l'affichage des fenêtres console avec le reste de l'interface Windows. Comme le windows-1252 englobe le charset latin-1, vous pourrez aussi afficher du latin-1 sans problème ^^
Mon amie las22 à qui je fais des bisous si elle lit ce billet, reproche à mon blog d'être trop technique. Elle n'a pas tort, même si j'ai toujours peur d'écrire des trucs inintéressants à blablater sur ma vie, un blog se doit d'être plus personnel. D'ailleurs c'est la saison, le virus a déjà touché Denis et Anubis, ce qui a d'ailleurs valu à ce dernier quelques retours de flamme sur les sites de discussion à propos de Mozilla. Il doit être comme moi : dès que quelque chose est trop compliqué alors qu'une solution simple est possible, je m'énerve :)
D'ailleurs y'a pleins de trucs qui m'énervent en informatique. Voici les plans que je me plais à rêver (il me faut des sous, du temps, davantage de connaissances et une baguette magique) :
J'inonderais le marché avec cette machine en les vendant 100 ¤ pièce et je rendrais enfin l'informatique meilleur, AH AH AH !
...
Mmh, je me fais peur parfois, mais je n'ai ni baguette magique, ni plein de sous, ni plein de temps et je ne suis pas omniscient. Bah, je fais comme tout le monde, j'essaie de faire des trucs à mon niveau :) Heureusement il y a quelques (trop rares) personnes qui aiment partager cette vision. Meta-geek powa ;)
Bon, je parle encore d'informatique, mais je tenais tout de même à évoquer cette vision mégalomane qui me submerge parfois :) En revanche maintenant il faut que je freine ma consultation sur le Net en rapport avec l'informatique. Cette nuit j'ai très mal dormi, j'ai rêvé de tous les sujets de discussion des blogs que je n'ai pas arrêté de consulter hier ; la LCEN, le xhtml, les news informatiques etc. C'était super gavant. J'aurais préféré rêvé que je suis allongé sur une plage de sable blanc au soleil avec plein de belles et gentilles vahinées aux seins pulpeux autour de moi.
Heureusement, je me libère l'esprit ce week-end. Je pars voir las22 à Poitiers avec des amis pour une bonne chtite teuf psytrance, organisée par Moonspirits, le label psytrance local. Ça va me faire du bien :)
Je n'ai pas trop l'habitude de parler politique sur ce blog, mais c'est l'ébullition depuis quelques jours à propos de la loi pour la confiance dans l'économie numérique (LCEN). Donc j'en touche deux mots et vous mets un lien vers chez Tristan qui explique ça très bien. Chez Tristan on parle aussi quelqu'un qui serait un député liberticide. Peut-être qu'il est faussé dans son jugement à croire qu'un filtrage de toutes les pages de la Toile est possible facilement. Voici le lien du billet de Tristan à propos de celui qui serait un député liberticide.
Je suis en train de préparer une nouvelle version de PngOptimizer, et j'y ajoute notamment la possibilité de pouvoir l'utiliser en ligne de commande. Par conséquent, ce logiciel aurait deux modes : un mode graphique, ou un mode en ligne de commande.
Et là je me confronte à une grosse difficulté : Windows, contrairement à d'autres systèmes d'exploitation, fait la différence entre ces modes de fonctionnement. Soit un programme est de type ligne de commande, soit il est de type graphique. Il s'agit d'un flag dans l'en-tête du fichier exécutable qui donne cette information à Windows. Voici les principales différences :
Exécutable de type « ligne de commande » :
Pour les exécutable de type « graphique », c'est l'inverse :
Ce que j'aimerais, c'est avoir un programme blocant mais qui n'ouvre pas de fenêtre console automatiquement. En raison de cette bizarrerie de conception de Windows, je ne peux pas faire en sorte que PngOptimizer ait ce comportement hybride. Je tiens à présenter mes excuses à l'utilisateur qui m'a demandé cette amélioration, cela est en train de prendre plus de temps que prévu.
J'ai tenté de contourner le problème de différentes façons, sans résultat acceptable. Je vais peut-être devoir fournir deux versions séparées, une pour la ligne de commande, une avec une interface graphique. Ce système d'exploitation me rend si las parfois...
J'ai apporté une amélioration à ma fonction « xhtmlspecialchars ». En xhtml 1.0 les caractères dont la valeur est comprise entre 0 et 31 sont interdits, mis à part les valeurs 9 (tabulation), 10 (retour chariot) et 13 (autre retour chariot). L'ancienne version gérait ces caractères quand ils sont sous la forme de références numériques (NCR) mais pas quand ils étaient sous forme binaire, à savoir quand on colle directement un de ces caractères dans le formulaire.
La nouvelle version gère désormais ce cas. Pour récupérer le code, vous pouvez aller consulter la page d'exemple mise à jour. Le champs texte est désormais rempli de ces caractères interdits à l'aide d'un script javascript.
Voici un petit bout de code pour les programmeurs en PHP. Vous avez peut-être mis en place un formulaire sur votre site Web afin que vos visiteurs puissent écrire et envoyer des messages. Cela peut être des commentaires d'un weblog, un forum, une fiche d'inscription... Ces informations apparaitront ensuite sur votre site, affichées dans un document (x)html.
Certains caractères peuvent poser des problèmes à l'affichage, voire provoquer des erreurs quand le document est en XML. Ces caractères sont : l'esperluette « & », les symboles inférieur « < » et supérieur « > », ainsi que certaines combinaisons de guillemets anglais et d'apostrophes. Pour pouvoir afficher quand même ces caractères, on doit, dans le document, les écrire sous forme d'entité ou sous forme de référence numérique. Par exemple, écrire & ou & pour afficher une esperluette.
Lors du traitement d'un message envoyé à l'aide d'un formulaire, il convient alors de convertir tous ces caractères spéciaux sous la forme d'entités ou de références numériques. Pour cela, il existe une fonction en PHP nommée « htmlspecialchars ». Cette fonction est bien pratique, cependant elle a un défaut : elle ne prend pas en compte les références numériques susceptibles de se trouver dans le texte reçu.
Comme je le mentionnais dans un précédent billet, les navigateurs modernes envoient une mixture de caractères codés normalement, et de caractères codés sous la forme de références numériques. Il est donc intéressant d'avoir une fonction qui remplace les caractères spéciaux, mais sans toucher aux références numériques. C'est ce que fait ma fonction, que j'ai appelée « xhtmlspecialchars ». Le prototype est le même que pour « htmlspecialchars ».
J'ai créé une page d'exemple pour illustrer cette fonction. Vous pouvez aussi accéder au code source. N'oubliez pas de récupérer la fonction « xhtmlspecialchars_callback » qui va avec la fonction principale « xhtmlspecialchars ».
À noter que si votre document utilise un format d'encodage basé sur Unicode (UTF-8, UTF-16 etc.) vous devriez pouvoir vous passer des références numériques, et donc de ce bout de code. En revanche, si votre site utilise de l'iso-8859-* ou du windows-1252, servez-vous :)
Je n'ai pas eu le temps de faire comme mon confrère Anubis qui a utilisé la magie de PHP. Voici donc un billet fait main le 1er janvier à 9 heures du matin juste avant de partir me remplir la tête de musique à une petite after psytrance :o)
Bonne année 2004 !