ThinkGeo.com    |     Documentation    |     Premium Support

Problem UTF8 when editing a feature

When editing a feature with a column "name" which value contains special characters like for exemple "carré" I get an error message concerning serialization and UTF8 Like this one:


sys.webforms.pagerequestmanagerservererrorexception désérialisation de l'objet de typeohM=.thQ=.'é?' contient des octets UTF8 non valides


Do you have an idea about how to fix it ?


Thanks.



Hi Gautier, 
  
 This issue occured in DataContractJsonSerializer.ReadObject(). If the column value is in compound charset (for example ANSI+GBK), you should encode it to a charset recognized by DataContractJsonSerializer (for example UTF8). 
  
 Please let us know if you have further questions. 
  
 Regards, 
  
 Ivan

OK thanks, so this value comes from my DB (sql server) then I got it in C# and put it in the feature column in an SQL2008 layer. 
 The error occurs on the client in javascript. 
  
 So at which moment do you advise me to encode it to UTF8 ? What is the best thing to do ? 
  
 Thank you very much for your help. 


Gautier, 
  
 In my opinion, before adding it to column value you should encode it, you should always keep it in right charset unless you need to use this column value. Any questions please let me know. 
  
 Regards, 
  
 Ivan

Hi, sorry I can't figure out how to make it work, I'm using this function to load sql2008overlay: 
protected void addSQL2008overlay(int calqueID, string calqueName, int calqueOrder)
        {
            string sql2008FeatureLayerName = "sql2008FeatureLayer_" + calqueID;
            string sql2008LayerOverlayID   = "sql2008LayerOverlay_" + calqueID;
            string sql2008LayerOverlayName = calqueOrder + ". " + calqueName;

            // Nouveau layer SQL SERVER
            MsSql2008FeatureLayer sql2008FeatureLayer = new MsSql2008FeatureLayer();
            sql2008FeatureLayer.Name = sql2008FeatureLayerName;
            sql2008FeatureLayer.ConnectionString = Taittinger.Global._ConnectionString;
            sql2008FeatureLayer.TableName = "formes";
            sql2008FeatureLayer.FeatureIdColumn = "featureID";
            sql2008FeatureLayer.WkbFieldName = "forme";
            sql2008FeatureLayer.WhereClause = "WHERE calqueID = " + calqueID;
            sql2008FeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.County1;
            sql2008FeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            sql2008FeatureLayer.FeatureSource.Projection = getProj("Epsg4326_To_SphericalMercator");

            // Ajout dans un overlay
            LayerOverlay sql2008LayerOverlay = new LayerOverlay(sql2008LayerOverlayID);
            sql2008LayerOverlay.Name = sql2008LayerOverlayName;
            sql2008LayerOverlay.IsBaseOverlay = false;
            sql2008LayerOverlay.Opacity = 0.5F;
            sql2008LayerOverlay.Layers.Add(sql2008FeatureLayer);
            Map1.CustomOverlays.Add(sql2008LayerOverlay);
        }
 

And after I enter in edit mode and when I finish to edit my shape, I get this error:


 


Thanks for you help.



Gautier, 
  
 Thanks for your code snippet. But the image you attached can’t be displayed, could you please try again or attach it as an attachment? 
  
 Regards, 
  
 Ivan 


 OK here it is !



Do you get the image this time ? 
  
 I must say that this error happens only when a column name or value contains special chars like: é è à … 
  
 Thank you.

 


Hi Gautier,
Thanks for posting the exception again, I tried creating the demo SQL server and importing the France shapfile including “é è à” characters in dbf. And then tried the shapes editing sample, but all works fine, I also tried changes “Region and culture of my PC”, but also get the right answer, could send us a snippet of testing database to forumsupport@thinkgeo.com ? Additionally, please let us whether there is any special setting of your PC, such Region , Culture etc.
Thanks,
Johnny

Hi, just sent to  forumsupport@thinkgeo.com a Test Case where I put a small part of my application to try to reproduce the problem. 
 I’m not putting it here because it is part of a comercial app. 
  
 I don’t know why, when loading my test case in your browser, the shape won’t display but if you then click on the “edit” button I put at the top of the page you will see the shape on the edit overlay. 
 Then you have to click on it and modify it and then click outside the shape. A popup balloon will appear. 
 If you change the value “Name” in the database on the “formes” table and replace the existing name “ABCD” by for exemple “ABCDé” then do the modifying operation again, you should get the error. 
  
 Or another way to have the error is to add a FeatureSourceColumn to the edit overlay. 
 I’m doing this: 
 Map1.EditOverlay.Columns.Add(new FeatureSourceColumn(“Name”)); 
  
 And you can add this right after to get the error: 
 Map1.EditOverlay.Columns.Add(new FeatureSourceColumn(“Nameé”)); 
  
 Please let me know if you manage to reproduce the error. 
  
 Thank you.

Please tell me also if you see any errors or bad programming in my sample code ! 
 Thanks.

Hi Gautier, 
  
 Thanks for your detailed demo, which runs into the error that you have mentioned, we are working on it now. Any progress will let you know. 
  
 Thanks again. 
  
 Johnny

 


Hi Gautier,
It’s a bug caused by dieselizing the JSON string to object if we use the Encoding .Default.GetByte. It has been fixed, but sorry that we are unable to send a temporary package to you until we release the v5.0 and unfreeze source code next Monday. If the issue is urgent to you, please let us know and we will consider other ways for you.
 
Thanks,
Johnny 

OK thank you for your feedback, I can wait the next release then. 
 Thanks.

Gautier, 
  
 Please keep an eye on the main page and email notification related to Release 5.0, have a good day. 
  
 Regards, 
  
 Ivan