Trouver l'encodage correspondant à une chaîne de caractères
12 réponses
JKB
Bonjour à tous,
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
JKB <knatschke@koenigsberg.fr> writes:
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
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
batyann811
JKB a écrit :
Bonjour à tous,
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
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 ?
JKB a écrit :
Bonjour à tous,
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
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 ?
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
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 ?
JKB
Le 24-11-2009, ? propos de Re: Trouver l'encodage correspondant à une chaîne de caractères, Jean-Marc Bourguet ?crivait dans fr.comp.lang.c :
JKB writes:
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ï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.
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.
Le 24-11-2009, ? propos de
Re: Trouver l'encodage correspondant à une chaîne de caractères,
Jean-Marc Bourguet ?crivait dans fr.comp.lang.c :
JKB <knatschke@koenigsberg.fr> writes:
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ï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.
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.
Le 24-11-2009, ? propos de Re: Trouver l'encodage correspondant à une chaîne de caractères, Jean-Marc Bourguet ?crivait dans fr.comp.lang.c :
JKB writes:
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ï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.
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.
JKB
Le 24-11-2009, ? propos de Re: Trouver l'encodage correspondant à une chaîne de caractères, batyann811 ?crivait dans fr.comp.lang.c :
JKB a écrit :
Bonjour à tous,
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
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 ?
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 ;-)
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.
Le 24-11-2009, ? propos de
Re: Trouver l'encodage correspondant à une chaîne de caractères,
batyann811 ?crivait dans fr.comp.lang.c :
JKB a écrit :
Bonjour à tous,
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
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 ?
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 ;-)
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.
Le 24-11-2009, ? propos de Re: Trouver l'encodage correspondant à une chaîne de caractères, batyann811 ?crivait dans fr.comp.lang.c :
JKB a écrit :
Bonjour à tous,
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
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 ?
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 ;-)
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.
batyann811
JKB a écrit :
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).
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...
JKB a écrit :
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).
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...
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).
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...
JKB
Le 24-11-2009, ? propos de Re: Trouver l'encodage correspondant à une chaîne de caractères, batyann811 ?crivait dans fr.comp.lang.c :
JKB a écrit :
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).
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.
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.
Le 24-11-2009, ? propos de
Re: Trouver l'encodage correspondant à une chaîne de caractères,
batyann811 ?crivait dans fr.comp.lang.c :
JKB a écrit :
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).
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.
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.
Le 24-11-2009, ? propos de Re: Trouver l'encodage correspondant à une chaîne de caractères, batyann811 ?crivait dans fr.comp.lang.c :
JKB a écrit :
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).
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.
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.
batyann811
JKB a écrit :
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.
JKB
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/
JKB a écrit :
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.
JKB
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/
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.
JKB
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/
batyann811
C'est l'algo utilisé dans firefox pour deviner l'encodage des pages web. Le problème : ça n'est pas toujours fiable.
C'est l'algo utilisé dans firefox pour deviner l'encodage des pages web.
Le problème : ça n'est pas toujours fiable.
C'est l'algo utilisé dans firefox pour deviner l'encodage des pages web. Le problème : ça n'est pas toujours fiable.
Antoine Leca
JKB écrivit :
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...
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
JKB écrivit :
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...
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.)
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...
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
JKB
Le 24-11-2009, ? propos de Re: Trouver l'encodage correspondant à une chaîne de caractères, Antoine Leca ?crivait dans fr.comp.lang.c :
JKB écrivit :
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...
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.)
Merci pour toutes ces pistes, je vais creuser...
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.
Le 24-11-2009, ? propos de
Re: Trouver l'encodage correspondant à une chaîne de caractères,
Antoine Leca ?crivait dans fr.comp.lang.c :
JKB écrivit :
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...
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.)
Merci pour toutes ces pistes, je vais creuser...
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.
Le 24-11-2009, ? propos de Re: Trouver l'encodage correspondant à une chaîne de caractères, Antoine Leca ?crivait dans fr.comp.lang.c :
JKB écrivit :
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...
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.)
Merci pour toutes ces pistes, je vais creuser...
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.