ThinkGeo.com    |     Documentation    |     Premium Support

Different encoding results when using query tools.executequery.GetFeatures WithinDistanceOf and querytools.executeQuery

Hello we´re having some issues with a shape encoding, in our code we have two distinct situations,


in the first one we choose a point in the map and the following code is executed:
 
returnCollection = theLayer.QueryTools.GetFeaturesWithinDistanceOf(centerPoint, ProjectionManager.ProjectionGeographyUnitMapLayer(IDMapLayer), DistanceUnit.Meter, distance, ReturningColumnsType.AllColumns);
 
the returnCollection is filled with the correct data in the 'freguesia field'(with the correct encoding).
 
in the second scenario i use the following code:
 
 tempDatatable = myFeatureLayer.QueryTools.ExecuteQuery(query);
 
 
in this case the datable is filled with data with strange caracteres in the field freguesia (encoding problems).
 



 
in the both scenarios the return values are the name of freguesias (portugal provinces)
 
When using the shape file in qgis using utf8 i see  the same problem with the caracteres.
 
Why are the results diferent?
when using theLayer.QueryTools.GetFeaturesWithinDistanceOf and theLayer.QueryTools.GetFeaturesWithinDistanceOf
 
 
 

 
 
 

 
 
 
best regards
 
Luís Diogo

Hello Luís Diogo, 



Thank you for your patience, as you said this problem is an encoding problem, 



tempDatatable = myFeatureLayer.QueryTools.ExecuteQuery(query); 




in this way the encoding will be the current culture if you didn't change it, so you will get the wrong characters. Please use the code below to resolve this: 

myFeatureLayer.Encoding = System.Text.Encoding.GetEncoding("")  



Regards, 



Gary



Hello Gary,


i´ve tryed your solution but still having problems in the encoding.


I´ve attached a sample shapefile that is causing problems(TEST.zip). If i open the shape in qgis with the ISO 8859-1 all the encoding is correct (see last image).


I've made a sample apllication to test and the problem persists (see images bellow).

 


 


 



 


 



 


 


 


 


 


 


 



 


 


 



 


 


Regards


Luís Diogo


 


 



006_005_004_003_002_001_TEST.zip (42 KB)

Hello Luís Diogo,  



When querying by SQL statement, we are using Oledb tech which is different from using GetFeaturesForDrawing stuff. The encoding property is only used for opening a DBF; while ExecuteQuery goes another way. As far as I know, there won't be a solution for giving encoding information on the Oledb stuff, we can just get the string and convert it. Just like the following code.  


ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(@"E:\Godspeed\Issues\006_005_004_003_002_001_TEST\Freguesias.shp");
worldLayer.RequireIndex = false;
worldLayer.Encoding = System.Text.Encoding.GetEncoding("iso-8859-1");
worldLayer.Open();
DataTable t = worldLayer.QueryTools.ExecuteQuery("SELECT Dicofre,Freguesia, Concelho FROM FREGUESIAS");

int rowCount = t.Rows.Count;
for (int i = 0; i < rowCount; i++)
{
    DataRow dr = t.Rows[i];
    string s = Encoding.GetEncoding("iso-8859-1").GetString(Encoding.Default.GetBytes(dr["Freguesia"].ToString()));
    Console.WriteLine(s);
}



Regards, 



Gary