Bonjour,
Je mets au point un driver sur une vieille base de données DBase 3+, qui date d'assez longtemps (fin 1980 - début 1990).
Les champs textes qu'elle déclare portent les caractères que les gens y mettent, mais cette base ne savait pas à l'époque que des caractères UTF-8 pourraient y être écrits, et ceux qui emploient ces bases de nos jours, eux, ne savent pas qu'elles ne les soutient pas. Donc, ils en mettent à l'occasion.
Et en lisant un champ, je peux obtenir ceci : "Bagneux", ou cela : "Asnières-sur-Seine".
Dans le deuxième cas, de manière silencieuse, j'aimerais pouvoir détecter immédiatement qu'il y a un problème d'encodage.
1) Est-ce que parmi les méthodes de la classe Character certaines vont pouvoir m'aider ? Je vois des méthodes telles que isUnicodeIdentifierStart(...) et d'autres, mais s'activeront-elles appliquées à une chaîne de caractères qui ne se croit justement pas UTF-8 et qui à l'instant où on lui pose la question pense qu'elle est ISO-8859-1 ou cp1252 ?
2) Mr Sauvage a un algorithme brutal sinon :
Chaîne 1 : la chaine originale.
Chaîne 2 : la chaine convertie en UTF-8
Si (chaîne 2.length() < chaîne 1.length()) Alors on devrait préférer Chaîne 2.
En partant de la constatation qu'une chaîne mal encodée a très souvent (... mais pas toujours !) une taille en caractères supérieure à celle qu'elle aurait dû avoir à cause des caractères parasites qui se sont insérés dedans.
Mais c'est évidement atroce comme méthode !
Que me suggérez-vous ?
Merci,
Grunt.
P.S. : Je peux difficilement éviter une des célèbres parodies qui s'applique aux problèmes de conversion de caractères :
Partager