Bonjour,
Je suis entrain de mettre au point des tests unitaires pour valider quelques fonctions de gestion de l'internationalisation.
L'un d'entre-eux a stoppé sur un problème inattendu.
La méthode toString() d'un objet internationalisé que j'ai renvoie une String en l'ayant constituée depuis un ResourceBundle où une propriété "toString='{'valeur : {0,number}'}', {1}" se trouve pour le français et "toString='{'value : {0,number}'}', {1}" pour l'anglais.
Je n'entre pas dans le détail de l'objet qui est un objet de test, mais sa méthode toString() répond dans mon cas de test :
Ce que je veux faire dans mon test, c'est vérifier que lorsque c'est le français qui aura du être retenu je trouverai dedans la chaîne "4 500", et que quand ce sera l'anglais, ce sera "4,500". le séparateur de milliers différant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 {valeur : 4 500}, locales : [fr_FR, en_GB], id : A, anomalies : anomalies : [ Anomalie ce 09/03/14. (ERREUR, -2121367804, fr) ]
alors, j'ai écrit un simple test se résumant à :
Mais ce test échoue. Et cela, alors même que visuellement je vois bien que dans son toString(), cette valeur, il la porte bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part assertTrue(o.toString().indexOf("4 500") != -1);
J'ai cherché et suis devenu embarrassé en constatant ceci :
Le "4 500" qui est dans l'indexOf de mon test est représenté sous forme d'octets ainsi : [52, 32, 53, 48, 48],
mais celui qui se trouve dans la chaîne de caractères renvoyée par le toString() de mon objet l'est de cette manière : [52, -62, -96, 53, 48, 48] pour la séquence qui m'intéresse.
L'espace est codé [32] dans l'une, [-62, -96] dans l'autre, et s'ils ont visuellement le même aspect, c'est que c'est sans doute un choix d'encodage.
Qui m'ennuie... car je n'ai pas encore pris l'initiative de toucher aux encodages sachant à quels affres cela peut mener si l'on y est pas bien préparé. Alors, ce que j'observe m'intrigue.
J'espère qu'avec un Collator.compare() je vais pouvoir me sortir d'affaire, mais je ne suis pas serein parce que je ne comprends pas bien comment un simple couple d'appels ResourceBundle + MessageFormat a pu amener à un changement d'encodage d'espace.
Avez-vous une idée de pourquoi ? Mon PC est tout ce qu'il faut fr_FR...
Merci !
Partager