Bonsoir,
Après d'infructueuses recherches sur le site de GTK, je me tourne vers vous :
Existe-t-il une fonction retournant le jeu de caractères utilisé par un fichier texte ?
exemple : utf8, unicode ou ASCII
merci de vos réponses
Bonsoir,
Après d'infructueuses recherches sur le site de GTK, je me tourne vers vous :
Existe-t-il une fonction retournant le jeu de caractères utilisé par un fichier texte ?
exemple : utf8, unicode ou ASCII
merci de vos réponses
Il n'existe pas de fonction pour ça, il faut tester un certains nombres de jeux de caractères (généralement ISO-8859-15 et UTF-8).
Après certains fichiers, par exemple XML, contiennent le type d'encodage mais il n'est pas exclu que l'utilisateur ce soit trompé.
J'ai un bout de code qui traine pour faire mais je ne l'ai pas sous le coude, je le posterai ce soir
Voici la version épurée de mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 #include <stdlib.h> #include <string.h> #include <glib.h> static const gchar *charsets[] = {"UTF-8", "ISO-8859-15", NULL}; static gboolean test_encoding (const gchar *path, const gchar *charset) { gboolean valid = FALSE; if (path != NULL) { gchar *content = NULL; g_file_get_contents (path, &content, NULL, NULL); if (content != NULL) { gchar *convert = NULL; gsize bytes_read = 0; convert = g_convert (content, -1, "UTF-8", charset, &bytes_read, NULL, NULL); if (convert != NULL) { if (bytes_read == strlen (content)) { valid = TRUE; } free (convert), convert = NULL; } free (content), content = NULL; } } return valid; } const gchar *encoding_get_charset (const gchar *path) { gint i; for (i = 0; charsets[i]; i++) { if (test_encoding (path, charsets[i])) { break; } } return charset[i]; }
Salut,
il existe une solution un peu moins élégante qui consiste à tester le fichier avec la commande file, par un tube. Au pire, le binaire "file" a un code source qui peut être obtenu (ou celui de gedit) mais là ça devient beaucoup plus complexe que le code ci-dessus.
J'ai galéré un moment là-dessus ...
Mon code est inspiré de celui de geditEnvoyé par Lunixinclar
Tu as bien sûr quelques techniques pour augmenter les chances de trouver le bon encodage, comme récupérer la liste de tous les encodages disponibles sur le système ou encore te baser sur les spécificités des types de fichier (par exemple pour le XML, la première indique l'encodage).
Mais mon code n'est pas optimisé et à chaque teste d'encodage, tu recharge le contenu du fichier, donc j'ai limité au plus courrant, suretout que c'est pour un éditeur de fichier XML donc si l'utilisateur ne renseigne pas correctement la première ligne, je veux bien l'aider mais y a des limites
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager