Encodage UTF-8 avec ogr2ogr sous Windows

publié le 14 octobre 2014 (modifié le 10 novembre 2015)

ogr2ogr permet de convertir des données vectorielles entre divers formats de fichiers, notamment par lots de données. Cependant les utilisateurs rencontrent fréquemment des problèmes d’encodage.
Cette fiche décrit comment convertir les fichiers en UTF-8.

Convertir vers Postgis

Par défaut, les bases Postgres sont encodées en UTF-8. Pour convertir des données vectorielles vers Postgis, ogr2ogr avec la variable d’environnement PGCLIENTENCODING.
Sous windows la commande est :
C :>Set PGCLIENTENCODING=ISO-8859-1
C :> ogr2ogr -f "PostgreSQL" "PG:host=.. user=.. password=.. dbname=.. " c :\fichier_source

Convertir vers Shapefile

Pour convertir un fichier à plat avec l’encodage ISO-8859-1 (Mapinfo, Shapefile, etc…) vers Shapefile avec l’encodage UTF8, il faut passer par 3 étapes :

  • Convertir le fichier à plat vers le format GML avec ogr2ogr en utilisant l’option —config OGR_FORCE_ASCII NO (C :>ogr2ogr —config OGR_FORCE_ASCII NO -f "GML" "fichier_gml" "fichier_source")
  • Editer le fichier GML avec Notepad++ ou PSPad et convertir le fichier en UTF8, on peut utiliser également le programme iconv pour windows
  • Convertir le fichier GML vers le format Shapefile avec ogr2ogr en utilisant l’option -lco ENCODING=UTF-8 pour créer un fichier .cpg qui force la reconnaissance du codage à la lecture (C :>ogr2ogr -f "ESRI Shapefile" "Fichier_shape" "fichier_gml" -lco ENCODING=UTF-8)

Une alternative pour les gros fichiers SHP, est d’ouvrir directement le DBF du SHP sous Libre Office et de l’enregistrer en CSV. C’est ce fichier CSV qui est traité par l’une des solutions ci-dessus pour être converti en UTF8, puis sauvegardé en DBF après re-ouverture sous Libre Office. Le DBF obtenu remplacera le DBF initial du fichier SHP.

Nouveau ! GDAL version 1.11.3
A partir de GDAL version 1.11.3, la conversion Shapefile vers Shapefile s’effectue en une seule étape :
L’option -lco ENCODING=UTF-8 modifie l’encodage des données et créé un fichier .cpg

C :>ogr2ogr -f "ESRI Shapefile" "Fichier_shape" "fichier_source" -lco ENCODING=UTF-8

Pour les autres formats (Mapinfo, …) il faut exécuter au préalable, une conversion supplémentaire vers un Shapefile temporaire.

C :>ogr2ogr -f "ESRI Shapefile" "shape_temp" "fichier_mapinfo"
C :>ogr2ogr -f "ESRI Shapefile" "Fichier_shape" "shape_temp" -lco ENCODING=UTF-8

Convertir vers Sqlite

Par défaut, les tables dans une base Sqlite sont encodées comme la table source. Pour convertir un fichier à plat avec l’encodage ISO-8859-1 (Mapinfo, Shapefile, etc…) vers SQLite avec l’encodage UTF8, il faut passer par 3 étapes :

  • Convertir le fichier à plat vers le format GML avec ogr2ogr en utilisant l’option —config OGR_FORCE_ASCII NO (C :>ogr2ogr —config OGR_FORCE_ASCII NO -f "GML" "fichier_gml" "fichier_source")
  • Editer le fichier GML avec Notepad++ ou PSPad et convertir le fichier en UTF8, on peut utiliser également le programme iconv pour windows
  • Convertir le fichier GML vers le format SQLite avec ogr2ogr (C :>ogr2ogr "SQLite" "bdd.sqlite" "fichier_gml" -nln nom_table -dsco SPATIALITE=YES). Attention l’option -dsco SPATIALITE=YES est à utiliser uniquement lors de la création de la bdd.sqlite, sinon il faut utiliser l’option -append pour ajouter une couche à une base Sqlite existante.

Nouveau !! GDAL version 1.11.3
On peut exécuter une conversion vers un Shapefile temporaire avec l’option -lco ENCODING=UTF-8 (Voir conversion vers Shapefile ci-dessus) puis ensuite convertir le Shapefile temporaire vers Sqlite .

[C :>ogr2ogr -f "ESRI Shapefile" "shape_source" "fichier_mapinfo"] conversion optionnelle fichier mapinfo
C :>ogr2ogr -f "ESRI Shapefile" "shape_temp" "shape_source" -lco ENCODING=UTF-8
C :>ogr2ogr "SQLite" "bdd.sqlite" "shape_temp" -nln nom_table -dsco SPATIALITE=YES