Je suis confronté à un problème sournois... Je dois convertir en
UTF-8 une chaîne de caractères composée en à peu près n'importe quoi
allant de l'ANSI à l'UTF8 en passant par toutes les déclinaisons de
l'ISO8859. Si je connais l'encodage de la source, c'est facile, il
me suffit d'utiliser la libiconv. Par contre, comment faire pour
déterminer l'encodage de la source ? Je n'ai rien trouvé d'efficace
jusqu'ici...
Cordialement,
JKB
--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
> Je suis confront� � un probl�me sournois... Je dois convertir en
> UTF-8 une cha�ne de caract�res compos�e en � peu pr�s n'importe quoi
> allant de l'ANSI � l'UTF8 en passant par toutes les d�clinaisons de
> l'ISO8859. Si je connais l'encodage de la source, c'est facile, il
> me suffit d'utiliser la libiconv. Par contre, comment faire pour
> d�terminer l'encodage de la source ? Je n'ai rien trouv� d'efficace
> jusqu'ici...
Avec ces contraintes, les seuls moyens que j'envisage sont bases sur une
hypothese des langues et d'analyse de la probabilite que le texte soit bien
dans ces langues pour chaque codage envisage. Pas simple.
A+
--
Jean-Marc
FAQ de fclc: http://www.levenez.com/lang/c/faq
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Aucune idée. J'aurais même tendance à dire que c'est impossible. Je
dirais qu'il faut au minimum savoir dans qu'elle langue est écrite ta
chaîne d'origine et encore ça doit rester coton. T'es sûr que c'est
possible ?
Aïe... J'ai essayé de voir comment faisait l'utilitaire iconv qui
arrive à se passer de l'option 'from', mais c'est tellement fouilli
que j'ai un peu de mal à voir.
Je n'en sais rien, mais j'aurais tendance à dire que oui vu que
iconv se démerde sur des fichiers (et que file -i est capable de sortir
l'encodage d'un fichier). Mon problème est que j'ai un
service qui tourne sur une socket (pour du géocodage d'adresses) et
que certains clients m'envoient des trucs dans une forme pour le
moins bizarre. Aujourd'hui, je récupère les données, j'envoie les
données dans un fichier et je convertis ce fichier en utf8 avant de
le relire. C'est loin d'être optimal...
J'oubliais, il est bien entendu interdit de demander aux différents
clients de fournir un truc propre, sinon, ce ne serait pas drôle ;-)
Tu as essayé de les tester sur des textes en différentes langues (russe,
grec, suédois...) pour voir si les résultats de ces commandes sont bien
fiables ? J'ai vu file se gourer plus d'une fois sur des types de
fichiers...
Non, je n'ai pas fait plus de tests que ça. Je reçois des adresses,
donc mon problème s'arrête à l'encodage des signes diacritiques,
bref, de tout ce qui peut composer une adresse et qui n'est pas dans
l'ASCII de base. Dans ce cas précis, file -i fonctionne plutôt pas
mal.
Il existe http://www.mozilla.org/projects/intl/chardet.html qui peut
peut être t'aider. Mais ça a l'air noyé dans les sources de firefox.
Sinon il y a un portage en java http://jchardet.sourceforge.net/
Pas sûr de bien voir la question sur le langage C.
Mais bon, on va supposer qu'il y en a bien une.
C assume un encodage des caractères (représenté par LC_CTYPE), et le
suppose unique et indéterminé pour le programmeur. Si ton compilateur
(et surtout la bibliothèque standard) dispose de caractères élargis
(wchar_t) encodés en Unicode, le plus simple ÀMHA est de faire confiance
à l'utilisateur et d'écrire
setlocale(LC_CTYPE, "");
/*...*/
wchat_t données[N];
if( !fgetws(données, N, flux_entrée) ) ouin_ouin();
/* ... ou bien utiliser mbs[r]towcs() ... */
... et il ne te reste plus qu'à décortiquer les wchar_t en unsigned
char[*] au standard utf8 (Google), puis éventuellement d'écrire le
résultat dans un flux binaire.
Avec des implémentations très récentes, tu peux même te risquer à
utiliser mbrtoc16() ou mbrtoc32() (ISO/CÉI RT 19769:2004,
www.open-std.org/JTC1/SC22/WG14/www/docs/n1040.pdf.)
Antoine
Merci pour toutes ces pistes, je vais creuser...
Hum... Faux ami. 'assume' = 'suppose' en français...
Le C fait l'hypothèse d'un encodage des caractères <...>
Merci. J'ai cherch� le mot (par ce que assume sonnait mal), mais je n'ai
pas trouv� sur le coup. Et comme autour de moi j'entend trop souvent le
m�me usage impropre de /asumir/ ou /assumir/ au lieu de /suponer/...
Antoine