- Inscription
Langue : [automatic], [fr], [en], … | Allez on remonte !
« Retourner à la documentation

(Brouillon) Unicode et UTF-8

Fffff … toutes ces heures passées à endurer ces problèmes d'encodages.

Je me devais de partager avec vous ce que j'en ai appris.

Si vous ne savez pas exactement la différence entre l'unicode et l'utf-8, allez voir cette excellente vidéo : [en] http://nedbatchelder.com/text/unipain.html

Vous avez aussi ces 2 excellents liens :
- http://sebsauvage.net/python/charsets_et_encoding.html
- http://sametmax.com/lencoding-en-python-une-bonne-fois-pour-toute/




Règle n°1: Autant que possible utiliser l'UTF-8 partout, tout le temps.

Le(s) problème(s), s'il y en a, ne viennent pas de l'UTF-8. L'UTF-8 est la solution à tout ces problèmes. LA SEULE solution admissibles.

Alors d'où viennent les problèmes ? Du fait que l'informatique a encore du retard a rattrapé et que, par défaut, il reste encore beaucoup trop de programmes / langages / etc utilisant des encodages stupides et arriérés par défaut :/


Le problème PHP :

Ahhh PHP .___. Conseil : Si vous pouvez, ne commencez jamais à l'utiliser :)

PHP, malgré qu'il soit si répandu, gère très mal l'UTF-8 par défaut :/

http://www.phpwact.org/php/i18n/utf-8

- N'utilisez pas htmlentities mais htmlspecialchars (et plus besoin d'arguments supplémentaires pour être réglo du coup)


Le problème MySQL :

Si vous n'avez pas MySQL5.3, pensez à mettre à jour ou changer d'hébergeur.

En effet, MySQL avant 5.3 ne possède pas la collation utf8mb4_unicode_ci. Or, seul utf8mb4 est capable de stocker des caractères utf8 de plus de 3 bytes.

Rappel : Par défaut, le protocole de communication de ce fichu SQL, est ISO-quelque chose (c'est très mal et il risque de vous convertir vos beaux caractères UTF-8). Pensez bien à exécuter la requête SET NAMES utf8 en premier lieu !

Si vous ne pouvez vraiment pas passez à une version supérieur ou égale à MySQL5.3, il reste quand même un sale hack :

Récupérer le code point du caractère ( http://stackoverflow.com/a/3742879/1524913 ) et vérifier s'il fait plus de 4 bytes, dans ce cas, remplacer le caractère par son équivalent XML (comme le fait htmlentities).

Le problème Windows : Si vous comptez utilisez la console Windows, vous serez fortement limité.

Un "hack" consiste à forcer le changement de la police de la console (même si on ne devrait jamais modifier l'environnement d'un programme normalement, ici c'est presque légitime vu à quel point Windows est toujours dans le siècle dernier) et d'utiliser ceci : http://www.janthor.com/sketches/index.php?/archives/19-How-to-change-the-font-of-the-Windows-console-with-Python.html
Dernière modification le 29/07/2013 à 2h58
» Commenter cet article / 0 commentaire(s)