Section courante

A propos

Section administrative du site

 Langage  Elément  Tutoriel  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Introduction
Référence des fonctions
Les premiers pas
Préface
Notes légales
Dictionnaire
Recherche

Les premiers pas

libiconv est une bibliothèque permettant de convertir des chaînes de caractères entre différents encodages. Elle est utile pour s'assurer de la compatibilité des textes entre différentes plateformes et systèmes.

Installation de libiconv

Sur Linux (Debian/Ubuntu)

L'installation de libiconv sur Linux dépend de la distribution utilisée. Sur les distributions basées sur Debian comme Ubuntu, il suffit d'exécuter la commande sudo apt install libiconv-dev après avoir mis à jour la liste des paquets avec sudo apt update. Sur les distributions basées sur Red Hat comme Fedora, CentOS ou RHEL, le package peut être installé avec sudo dnf install libiconv. Cependant, certaines distributions incluent déjà les fonctionnalités de libiconv dans la bibliothèque standard glibc, ce qui peut rendre l'installation d'un package supplémentaire inutile. Pour vérifier si iconv est installé, vous pouvez exécuter iconv --version dans un terminal. Si la commande est introuvable, il faudra installer le paquet approprié ou compiler libiconv manuellement à partir du site officiel. Cette installation permet ensuite d'utiliser la bibliothèque pour convertir des encodages de texte dans vos applications.

sudo apt update
sudo apt install libiconv-dev

Remarque : Sur certaines distributions, libiconv est inclus dans glibc, et il n'est pas nécessaire d'installer un paquet supplémentaire.

Sur macOS (via Homebrew)

Sous macOS, libiconv est disponible via Homebrew, un gestionnaire de paquets populaire. Pour l'installer, il suffit d'exécuter la commande brew install libiconv, ce qui télécharge et configure automatiquement la bibliothèque. Homebrew permet également de mettre à jour libiconv facilement avec brew upgrade libiconv si une nouvelle version est disponible. Une fois installé, vous pouvez vérifier la présence de libiconv en exécutant iconv --version ou en recherchant la bibliothèque partagée avec ls /usr/local/lib | grep iconv. macOS inclut déjà certaines fonctionnalités d'iconv dans sa bibliothèque standard, mais installer libiconv via Homebrew garantit l'accès à la dernière version et aux fonctionnalités avancées. Pour les développeurs, il est aussi possible de compiler libiconv manuellement en téléchargeant le code source depuis GNU. Cette installation est essentielle pour assurer la compatibilité des encodages dans divers projets.

brew install libiconv

Sur Windows (MSYS2)

Sur Windows, l'installation de libiconv peut se faire via MSYS2, un environnement permettant d'utiliser des outils GNU sur Windows. La commande pacman -S mingw-w64-x86_64-libiconv installe la bibliothèque pour une utilisation avec MinGW-w64. Si vous préférez une installation manuelle, vous pouvez télécharger les binaires de libiconv depuis le site GNU et les extraire dans un dossier accessible par votre compilateur. Pour les projets en C ou C++, il est nécessaire d'ajouter les fichiers d'entête (iconv.h) et les bibliothèques (libiconv.a ou iconv.dll) aux chemins de compilation. Sous Visual Studio, il faudra configurer le Linker pour inclure libiconv dans le projet. Vérifiez également la version de l'encodage Windows, car Windows utilise souvent code page 1252 au lieu de ISO-8859-1, ce qui peut influencer le comportement des conversions. Une bonne configuration de libiconv garantit une gestion correcte des textes dans les applications Windows.

pacman -S mingw-w64-x86_64-libiconv

Si vous utilisez MinGW, téléchargez les binaires depuis le site GNU :

https://ftp.gnu.org/pub/gnu/libiconv/

Principales fonctions de libiconv

Les principales fonctions de libiconv incluent iconv_open(), iconv(), iconv_close() et iconvctl(). iconv_open() initialise un convertisseur entre deux encodages, retournant un descripteur de type iconv_t qui sera utilisé pour effectuer les conversions. La fonction iconv() effectue réellement la conversion, en modifiant les buffers d'entrée et de sortie tout en gérant les tailles restantes des données à traiter. Après la conversion, iconv_close() doit être appelé pour libérer les ressources associées au convertisseur. iconvctl() permet de configurer ou interroger les paramètres du convertisseur, comme l'option //IGNORE pour ignorer les caractères invalides. Ces fonctions offrent une gestion fine des conversions entre encodages, avec un contrôle sur les erreurs et la manière dont elles sont traitées. Elles sont essentielles pour gérer les conversions de texte dans des applications multi-encodages.

Nom Description
iconv Cette fonction permet d'effectuer une conversion d'ensemble de caractères.
iconvctl Cette fonction permet de contrôler le comportement d'iconv.
iconv_close Cette fonction permet de désallouer le descripteur pour la conversion de l'ensemble de caractères.
iconv_open Cette fonction permet d'allouer un descripteur pour la conversion de l'ensemble de caractères.
iconv_open_into Cette fonction permet d'initialiser le descripteur pour la conversion de l'ensemble de caractères.

Vérifier si libiconv fonctionne

L'exemple suivant montre comment tester si libiconv est bien installé et opérationnel sur votre système. Pour cela, nous utilisons la fonction iconv_open(), permettant d'ouvrir un descripteur de conversion entre deux encodages, ici "UTF-8" et "ISO-8859-1". Si l'ouverture du convertisseur réussit, cela signifie que la bibliothèque est bien disponible et que les conversions peuvent être effectuées. En cas d'échec, la fonction retourne (iconv_t)-1, et nous affichons un message d'erreur grâce à perror(). Une fois le test réussi, il est important de fermer le descripteur avec iconv_close(), pour éviter toute fuite de ressources. Ce programme est un bon point de départ pour vérifier votre environnement de développement avant d'implémenter des conversions plus complexes. Il suffit de compiler avec -liconv pour s'assurer que l'éditeur de liens trouve bien la bibliothèque.

  1. #include <stdio.h>
  2. #include <iconv.h>
  3.  
  4. int main() {
  5.     iconv_t cd = iconv_open("UTF-8", "ISO-8859-1");
  6.     if (cd == (iconv_t)-1) {
  7.         perror("iconv_open");
  8.         return 1;
  9.     }
  10.  
  11.     printf("Libiconv fonctionne !\n");
  12.  
  13.     iconv_close(cd);
  14.     return 0;
  15. }

Compilez avec :

gcc -o test_iconv test_iconv.c -liconv

Convertir un texte de ISO-8859-1 vers UTF-8

Dans cet exemple, nous voyons comment convertir une chaîne de caractères d'un encodage ISO-8859-1 vers UTF-8 à l'aide de iconv(). D'abord, nous ouvrons un convertisseur avec iconv_open(), puis nous définissons un buffer d'entrée contenant une chaîne en ISO-8859-1. La conversion se fait en passant inbuf, outbuf, et leurs tailles respectives à iconv(). Si la conversion échoue, nous affichons un message d'erreur grâce à perror(), ce qui permet de diagnostiquer des problèmes d'encodage. Le texte converti est stocké dans un buffer output et affiché à l'écran. Cet exemple met en avant la nécessité de gérer la mémoire et d'utiliser des tampons suffisamment grands pour éviter des dépassements. Il est important de bien comprendre les tailles des tampons et de vérifier les erreurs pour assurer une conversion correcte et sans perte de données.

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <iconv.h>
  5.  
  6. void convert_encoding(const char *input, size_t input_size) {
  7.     iconv_t cd = iconv_open("UTF-8", "ISO-8859-1");
  8.     if (cd == (iconv_t)-1) {
  9.         perror("iconv_open");
  10.         return;
  11.     }
  12.  
  13.     char output[256];
  14.     char *inbuf = (char *)input;
  15.     char *outbuf = output;
  16.     size_t inbytesleft = input_size;
  17.     size_t outbytesleft = sizeof(output);
  18.  
  19.     memset(output, 0, sizeof(output));
  20.     
  21.     if (iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft) == (size_t)-1) {
  22.         perror("iconv");
  23.     } else {
  24.         printf("Texte converti : %s\n", output);
  25.     }
  26.  
  27.     iconv_close(cd);
  28. }
  29.  
  30. int main() {
  31.     char text[] = "Bonjour, ça va ?";
  32.     convert_encoding(text, strlen(text));
  33.     return 0;
  34. }

Compilez avec :

gcc -o convert convert.c -liconv

Ignorer les caractères invalides avec //IGNORE

Parfois, une conversion de texte rencontre des caractères ne pouvant pas être représentés dans l'encodage cible, ce qui entraîne des erreurs. L'utilisation de //IGNORE dans iconv_open() permet d'ignorer ces caractères invalides au lieu d'arrêter la conversion. Cette option est particulièrement utile lorsque l'on doit convertir des fichiers avec des caractères inconnus ou mal encodés. En pratique, nous ouvrons un convertisseur avec iconv_open("UTF-8//IGNORE", "ISO-8859-1"), ce qui permet d'ignorer automatiquement les caractères non pris en charge. Cela peut être utile pour des textes issus de bases de données, de fichiers corrompus, ou lorsqu'on ne maîtrise pas totalement la source des données. Cependant, cette approche peut aussi entraîner une perte d'information, car les caractères non reconnus ne seront pas remplacés mais simplement supprimés. Il est donc conseillé de l'utiliser avec prudence, selon le contexte de l'application. :

  1. iconv_t cd = iconv_open("UTF-8//IGNORE", "ISO-8859-1");    


PARTAGER CETTE PAGE SUR
Dernière mise à jour : Mardi, le 25 mars 2025