diff --git a/python/core/qgsvectorfilewriter.sip b/python/core/qgsvectorfilewriter.sip index 0e1a68961a5..237ac875d91 100644 --- a/python/core/qgsvectorfilewriter.sip +++ b/python/core/qgsvectorfilewriter.sip @@ -74,7 +74,7 @@ class QgsVectorFileWriter { MetaData(); - MetaData( const QString& longName, const QString& trLongName, const QString& glob, const QString& ext, const QMap& driverOptions, const QMap& layerOptions ); + MetaData( const QString& longName, const QString& trLongName, const QString& glob, const QString& ext, const QMap& driverOptions, const QMap& layerOptions, const QString& compulsoryEncoding = QString() ); QString longName; QString trLongName; @@ -82,6 +82,8 @@ class QgsVectorFileWriter QString ext; QMap driverOptions; QMap layerOptions; + /** Some formats require a compulsory encoding, typically UTF-8. If no compulsory encoding, empty string */ + QString compulsoryEncoding; }; enum WriterError diff --git a/src/core/qgsvectorfilewriter.cpp b/src/core/qgsvectorfilewriter.cpp index 27bf833b2f4..3f6542e4017 100644 --- a/src/core/qgsvectorfilewriter.cpp +++ b/src/core/qgsvectorfilewriter.cpp @@ -238,21 +238,6 @@ void QgsVectorFileWriter::init( QString vectorFileName, deleteShapeFile( vectorFileName ); } - else if ( driverName == "KML" ) - { - if ( !vectorFileName.endsWith( ".kml", Qt::CaseInsensitive ) ) - { - vectorFileName += ".kml"; - } - - if ( fileEncoding.compare( "UTF-8", Qt::CaseInsensitive ) != 0 ) - { - QgsDebugMsg( "forced UTF-8 encoding for KML" ); - fileEncoding = "UTF-8"; - } - - QFile::remove( vectorFileName ); - } else { if ( metadataFound ) @@ -277,6 +262,16 @@ void QgsVectorFileWriter::init( QString vectorFileName, QFile::remove( vectorFileName ); } + if ( metadataFound && !metadata.compulsoryEncoding.isEmpty() ) + { + if ( fileEncoding.compare( metadata.compulsoryEncoding, Qt::CaseInsensitive ) != 0 ) + { + QgsDebugMsg( QString( "forced %1 encoding for %2" ).arg( metadata.compulsoryEncoding ).arg( driverName ) ); + fileEncoding = metadata.compulsoryEncoding; + } + + } + char **options = nullptr; if ( !datasourceOptions.isEmpty() ) { @@ -865,7 +860,8 @@ QMap QgsVectorFileWriter::initMetaData() "*.geojson", "geojson", datasetOptions, - layerOptions + layerOptions, + "UTF-8" ) ); @@ -959,7 +955,8 @@ QMap QgsVectorFileWriter::initMetaData() "*.xml", "xml", datasetOptions, - layerOptions + layerOptions, + "UTF-8" ) ); @@ -1048,7 +1045,8 @@ QMap QgsVectorFileWriter::initMetaData() "*.gml", "gml", datasetOptions, - layerOptions + layerOptions, + "UTF-8" ) ); @@ -1090,7 +1088,8 @@ QMap QgsVectorFileWriter::initMetaData() "*.gpkg", "gpkg", datasetOptions, - layerOptions + layerOptions, + "UTF-8" ) ); @@ -1168,7 +1167,8 @@ QMap QgsVectorFileWriter::initMetaData() "*.gpx", "gpx", datasetOptions, - layerOptions + layerOptions, + "UTF-8" ) ); @@ -1233,7 +1233,8 @@ QMap QgsVectorFileWriter::initMetaData() "*.kml", "kml", datasetOptions, - layerOptions + layerOptions, + "UTF-8" ) ); @@ -1498,7 +1499,8 @@ QMap QgsVectorFileWriter::initMetaData() "*.sqlite", "sqlite", datasetOptions, - layerOptions + layerOptions, + "UTF-8" ) ); @@ -1579,7 +1581,8 @@ QMap QgsVectorFileWriter::initMetaData() "*.sqlite", "sqlite", datasetOptions, - layerOptions + layerOptions, + "UTF-8" ) ); // AutoCAD DXF @@ -1669,7 +1672,8 @@ QMap QgsVectorFileWriter::initMetaData() "*.gdb", "gdb", datasetOptions, - layerOptions + layerOptions, + "UTF-8" ) ); @@ -1694,7 +1698,8 @@ QMap QgsVectorFileWriter::initMetaData() "*.xlsx", "xlsx", datasetOptions, - layerOptions + layerOptions, + "UTF-8" ) ); @@ -1719,7 +1724,8 @@ QMap QgsVectorFileWriter::initMetaData() "*.ods", "ods", datasetOptions, - layerOptions + layerOptions, + "UTF-8" ) ); diff --git a/src/core/qgsvectorfilewriter.h b/src/core/qgsvectorfilewriter.h index 02f918f60aa..a6f54f4b433 100644 --- a/src/core/qgsvectorfilewriter.h +++ b/src/core/qgsvectorfilewriter.h @@ -120,13 +120,14 @@ class CORE_EXPORT QgsVectorFileWriter MetaData() {} - MetaData( const QString& longName, const QString& trLongName, const QString& glob, const QString& ext, const QMap& driverOptions, const QMap& layerOptions ) + MetaData( const QString& longName, const QString& trLongName, const QString& glob, const QString& ext, const QMap& driverOptions, const QMap& layerOptions, const QString& compulsoryEncoding = QString() ) : longName( longName ) , trLongName( trLongName ) , glob( glob ) , ext( ext ) , driverOptions( driverOptions ) , layerOptions( layerOptions ) + , compulsoryEncoding( compulsoryEncoding ) {} QString longName; @@ -135,6 +136,8 @@ class CORE_EXPORT QgsVectorFileWriter QString ext; QMap driverOptions; QMap layerOptions; + /** Some formats require a compulsory encoding, typically UTF-8. If no compulsory encoding, empty string */ + QString compulsoryEncoding; }; enum WriterError