Re: Wrapper string encodings are inconsistent

Even Rouault via gdal-dev <[email protected]>
Newsgroups gmane.comp.gis.gdal.devel
Message-ID <[email protected]>
Hi Michael,

I assume you're talking about the C# or Java bindings . In the case of 
the Python bindings, given the dynamic typing of the language, the 
typemap code tries to convert to UTF-8 when possible or return a bytes 
if not, and is also tolerant on if it receives a Unicode string or a 
bytes as input.

The issue is that even if *nominally* exchanges in the GDAL API are 
supposed to be in UTF-8, there is the possibility that some drivers 
might return strings in a unknown encoding. That could be CSV for 
example, or shapefiles or mapinfo files whose declared encoding is not 
understood by GDAL. I believe there is a ticket about the possibility of 
creating 2 variants of the SWIG methods for which that could occur: one 
with UTF-8, one with a binary type. Actually that might be this PR 
https://github.com/OSGeo/gdal/pull/3825 that  got stale.

Even

Le 25/03/2026 à 20:00, Michael via gdal-dev a écrit :
> Every function which returns char** has the "char **CSL" typemap 
> applied, which causes strings in the returned array to be decoded with 
> UTF-8.
>
> Every function which accepts a char** parameter has either the "char 
> **options", "char **dict", or "char **dictAndCSLDestroy" typemap 
> applied, which causes strings in the parameter's array to be encoded 
> with UTF-8.
>
> However, many functions which return a single string value or accept 
> single strings as arguments do not use UTF-8 encoding. This causes 
> several inconsistencies in the wrapper's behavior.
>
> For example, many times string values from string arrays which are 
> UTF-8 are used in other functions which are not UTF-8.
>
> Some examples:
> - AlgorithmRegistry.GetAlgNames() returns a string array of algorithm 
> names decoded with UTF-8, but AlgorithmRegistry.InstantiateAlg(string 
> algName) does not encode algName with UTF-8.
> - Algorithm.GetArgNames() returns a string array of argument names 
> decoded with UTF-8, but Algorithm.GetArg(string argName) does not 
> encode argName with UTF-8.
> - GeomCoordinatePrecision.GetFormats() returns a string array of 
> format names decoded with UTF-8, but 
> GeomCoordinatePrecision.GetFormatSpecificOptions(string formatName) 
> does not encode formatName with UTF-8.
>
> Also, some functions which return a string array have related 
> functions which return a single string value, but the strings in the 
> array are encoded with UTF-8 while the single string values are not. 
> For example, AlgorithmArg.GetAsStringList() returns an array of 
> strings decoded with UTF-8, but AlgorithmArg.GetAsString() does not 
> decode its returned string with UTF-8.
>
> And finally, many other string functions which accept or return 
> strings not encoded with UTF-8 probably _should be UTF-8_.
>
> Some examples:
> - Any "Get*Name" function or "name" property
> - Any "Get*Description" function
> - Any "Create*", "Delete*", or "Get*" function which accepts a "*name" 
> parameter
>
> Really, are there _any_ strings which _shouldn't_ be encoded with 
> UTF-8? I can't find a single reason why every string passed to the 
> wrapper should not be encoded as UTF-8, and no reason why every string 
> retrieved from the wrapper should not be decoded with UTF-8.
>
> -- 
> Michael Bucari
>
> _______________________________________________
> gdal-dev mailing list
> [email protected]
> https://lists.osgeo.org/mailman/listinfo/gdal-dev

-- 
http://www.spatialys.com
My software is free, but my time generally not.

_______________________________________________
gdal-dev mailing list
[email protected]
https://lists.osgeo.org/mailman/listinfo/gdal-dev
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.