Convertisseur de fichiers vers/depuis utf-8

Soyez le premier à donner votre avis sur cette source.

Vue 6 353 fois - Téléchargée 203 fois

Description

Ce (très) simple programme convertit les fichiers de votre codage local (option -l) vers UTF-8 et inversement (option -u), en utilisant les fonctions de conversions fournies avec la libc.

Source / Exemple :


#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <glib/gconvert.h>

int main(int argc, char** argv) {
  FILE* f;
  char* t = NULL;
  int n = 0;
  gchar* b;
  if (argc != 3 || (strcmp(argv[1], "-l") != 0 && strcmp(argv[1], "-u") != 0)) {
    fprintf(stderr, "Usage: uconvert -l file\n");
    fprintf(stderr, "       uconvert -u file\n");
    return EXIT_FAILURE;
  }
  if ((f = fopen(argv[2], "rt")) == NULL) {
    fprintf(stderr, "Error opening file `%s` for reading.\n", argv[2]);
    return EXIT_FAILURE;
  }
  while (feof(f) == 0) {
    t = realloc(t, n + 1);
    t[n++] = fgetc(f);
  }
  fclose(f);
  if (t == NULL) {
    fprintf(stderr, "File `%s` is empty.\n", argv[2]);
    return EXIT_FAILURE;
  }
  t[n - 1] = '\0';
  fprintf(stderr, "Converting file `%s` ... ", argv[2]);
  if (strcmp(argv[1], "-u") == 0) {
    if ((b = g_locale_from_utf8(t, -1, NULL, NULL, NULL)) == NULL) {
      fprintf(stderr, "error\n");
      free(t);
      return EXIT_FAILURE;
    }
  } else {
    if ((b = g_locale_to_utf8(t, -1, NULL, NULL, NULL)) == NULL) {
      fprintf(stderr, "error\n");
      free(t);
      return EXIT_FAILURE;
    }
  }
  if ((f = fopen(argv[2], "wt")) == NULL) {
    fprintf(stderr, "error\n");
    free(b);
    free(t);
    return EXIT_FAILURE;
  }
  fprintf(f, "%s", b);
  fprintf(stderr, "done\n");
  free(b);
  free(t);
  return EXIT_SUCCESS;
}

Conclusion :


Compilé et fonctionne sous Windows. Pour Linux, je testerais çà ce soir, tranquillement chez moi ;-)

Pour ceux qui n'ont pas la libc d'installée, plutôt que de recompiler la version du site GNU, voyez plutôt si vous pouvez installer GTK+, la libc y est intégrée, et la plupart des compilos (VC, BCC et GCC) sont supportés...
url : http://www.dropline.net/gtk/

Enfin, pour ceux qui utilisent GCC, jetez un oeil sur mon site, j'ai mis en ligne une archive avec GCC, OpenSSL, mySQL, GTK+ et les pthreads, le tout pour Windows et prêt à l'emploi, bien sûr...
url : http://caranarchie.free.fr/

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
vendredi 4 février 2005
Statut
Membre
Dernière intervention
7 février 2005

Salut
Ton programme m'interresse beaucoup mais je n'arrive pas à le faire fonctionner sous visual C++ 6.
Ou sont les fonctions "g_locale_from_utf8" et "g_locale_to_utf8" et le fichier "glib/gconvert.h"
Merci d'avance pour ton aide.
@+
bye
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
En effet, en plus je me suis mis à GTK depuis, merci ! :)
Messages postés
202
Date d'inscription
vendredi 6 juillet 2001
Statut
Membre
Dernière intervention
31 octobre 2007

Ton code peut etre compilé sous windoz déjà, et ça vient pas des variables d'environnements (quoique c'est possible) mais là dans ton cas t'as oublié d'initialiser gtk (bha wé sinon ça marche pas).
Donc fais un appel à gtk_init() et si ça ne marche toujours pas rajoute en plus setlocale (LC_CTYPE, "fr_FR"); au début du code.
Apres ça marche nickel quelque soit le charset local puisque ça le passe en fr_FR.
Bonne prog.
Thaeron
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
bon, ben sous linux, il compile mais veut rien convertir... sûrement une histoire avec les variables d'environnement (LANG et compagnie), mais j'ai eu la flemme de chercher hier o :-)

je corrige dès que je trouve comment faire... ciao

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.