@@ -80,25 +80,26 @@ bool GeoTools::GeocodeGoogle(const wxString& address, double* lat, double* lon,
8080 return false ;
8181 }
8282
83- rapidjson::Document reader;
83+ // change from UTF8 to UTF16 encoding to address unicode characters per SAM GitHub issue 1848
84+ rapidjson::GenericDocument < rapidjson::UTF16<> > reader;
8485 wxString str = curl.GetDataAsString ();
8586 reader.Parse (str.c_str ());
8687
8788 if (!reader.HasParseError ()) {
88- if (reader.HasMember (" results" )) {
89- if (reader[" results" ].IsArray ()) {
90- if (reader[" results" ][0 ].HasMember (" geometry" )) {
91- if (reader[" results" ][0 ][" geometry" ].IsArray ()) {
92- if (reader[" results" ][0 ][" geometry" ][0 ].HasMember (" location" )) {
93- if (reader[" results" ][0 ][" geometry" ][0 ][" location" ].HasMember (" lat" )) {
94- if (reader[" results" ][0 ][" geometry" ][0 ][" location" ][" lat" ].IsNumber ()) {
95- *lat = reader[" results" ][0 ][" geometry" ][0 ][" location" ][" lat" ].GetDouble ();
89+ if (reader.HasMember (L " results" )) {
90+ if (reader[L " results" ].IsArray ()) {
91+ if (reader[L " results" ][0 ].HasMember (L " geometry" )) {
92+ if (reader[L " results" ][0 ][L " geometry" ].IsArray ()) {
93+ if (reader[L " results" ][0 ][L " geometry" ][0 ].HasMember (L " location" )) {
94+ if (reader[L " results" ][0 ][L " geometry" ][0 ][L " location" ].HasMember (L " lat" )) {
95+ if (reader[L " results" ][0 ][L " geometry" ][0 ][L " location" ][L " lat" ].IsNumber ()) {
96+ *lat = reader[L " results" ][0 ][L " geometry" ][0 ][L " location" ][L " lat" ].GetDouble ();
9697 success = true ;
9798 }
9899 }
99- if (reader[" results" ][0 ][" geometry" ][0 ][" location" ].HasMember (" lng" )) {
100- if (reader[" results" ][0 ][" geometry" ][0 ][" location" ][" lng" ].IsNumber ()) {
101- *lon = reader[" results" ][0 ][" geometry" ][0 ][" location" ][" lng" ].GetDouble ();
100+ if (reader[L " results" ][0 ][L " geometry" ][0 ][L " location" ].HasMember (L " lng" )) {
101+ if (reader[L " results" ][0 ][L " geometry" ][0 ][L " location" ][L " lng" ].IsNumber ()) {
102+ *lon = reader[L " results" ][0 ][L " geometry" ][0 ][L " location" ][L " lng" ].GetDouble ();
102103 success &= true ;
103104 }
104105 }
@@ -112,9 +113,9 @@ bool GeoTools::GeocodeGoogle(const wxString& address, double* lat, double* lon,
112113
113114 success = false ;// overrides success of retrieving data
114115
115- if (reader.HasMember (" status" )) {
116- if (reader[" status" ].IsString ()) {
117- str = reader[" status" ].GetString ();
116+ if (reader.HasMember (L " status" )) {
117+ if (reader[L " status" ].IsString ()) {
118+ str = reader[L " status" ].GetString ();
118119 success = str.Lower () == " ok" ;
119120 }
120121 }
@@ -142,13 +143,13 @@ bool GeoTools::GeocodeGoogle(const wxString& address, double* lat, double* lon,
142143 reader.Parse (str.c_str ());
143144
144145 if (!reader.HasParseError ()) {
145- if (reader.HasMember (" rawOffset" )) {
146- if (reader[" rawOffset" ].IsNumber ()) {
147- *tz = reader[" rawOffset" ].GetDouble () / 3600.0 ;
146+ if (reader.HasMember (L " rawOffset" )) {
147+ if (reader[L " rawOffset" ].IsNumber ()) {
148+ *tz = reader[L " rawOffset" ].GetDouble () / 3600.0 ;
148149 success = true ;
149150 }
150- else if (reader[" rawOffset" ].IsInt ()) {
151- *tz = reader[" rawOffset" ].GetInt () / 3600.0 ;
151+ else if (reader[L " rawOffset" ].IsInt ()) {
152+ *tz = reader[L " rawOffset" ].GetInt () / 3600.0 ;
152153 success = true ;
153154 }
154155 }
@@ -157,9 +158,9 @@ bool GeoTools::GeocodeGoogle(const wxString& address, double* lat, double* lon,
157158 // check status code
158159 success = false ;// overrides success of retrieving data
159160
160- if (reader.HasMember (" status" )) {
161- if (reader[" status" ].IsString ()) {
162- str = reader[" status" ].GetString ();
161+ if (reader.HasMember (L " status" )) {
162+ if (reader[L " status" ].IsString ()) {
163+ str = reader[L " status" ].GetString ();
163164 success = str.Lower () == " ok" ;
164165 }
165166 }
@@ -207,7 +208,8 @@ bool GeoTools::GeocodeDeveloper(const wxString& address, double* lat, double* lo
207208 return false ;
208209 }
209210
210- rapidjson::Document reader;
211+ // change from UTF8 to UTF16 encoding to address unicode characters per SAM GitHub issue 1848
212+ rapidjson::GenericDocument < rapidjson::UTF16<> > reader;
211213 wxString str = curl.GetDataAsString ();
212214
213215 // str.Replace("\"", "\\\"");
@@ -224,7 +226,7 @@ bool GeoTools::GeocodeDeveloper(const wxString& address, double* lat, double* lo
224226
225227// rapidjson::ParseResult ok = reader.Parse((const char*)str.c_str());
226228// rapidjson::ParseResult ok = reader.ParseStream(is);
227- rapidjson::ParseResult ok = reader.Parse < 0 > (str.c_str ());
229+ rapidjson::ParseResult ok = reader.Parse (str.c_str ());
228230
229231
230232 /*
@@ -250,20 +252,20 @@ bool GeoTools::GeocodeDeveloper(const wxString& address, double* lat, double* lo
250252 */
251253
252254 if (!reader.HasParseError ()) {
253- if (reader.HasMember (" results" )) {
254- if (reader[" results" ].IsArray ()) {
255- if (reader[" results" ][0 ].HasMember (" locations" )) {
256- if (reader[" results" ][0 ][" locations" ].IsArray ()) {
257- if (reader[" results" ][0 ][" locations" ][0 ].HasMember (" latLng" )) {
258- if (reader[" results" ][0 ][" locations" ][0 ][" latLng" ].HasMember (" lat" )) {
259- if (reader[" results" ][0 ][" locations" ][0 ][" latLng" ][" lat" ].IsNumber ()) {
260- *lat = reader[" results" ][0 ][" locations" ][0 ][" latLng" ][" lat" ].GetDouble ();
255+ if (reader.HasMember (L " results" )) {
256+ if (reader[L " results" ].IsArray ()) {
257+ if (reader[L " results" ][0 ].HasMember (L " locations" )) {
258+ if (reader[L " results" ][0 ][L " locations" ].IsArray ()) {
259+ if (reader[L " results" ][0 ][L " locations" ][0 ].HasMember (L " latLng" )) {
260+ if (reader[L " results" ][0 ][L " locations" ][0 ][L " latLng" ].HasMember (L " lat" )) {
261+ if (reader[L " results" ][0 ][L " locations" ][0 ][L " latLng" ][L " lat" ].IsNumber ()) {
262+ *lat = reader[L " results" ][0 ][L " locations" ][0 ][L " latLng" ][L " lat" ].GetDouble ();
261263 success = true ;
262264 }
263265 }
264- if (reader[" results" ][0 ][" locations" ][0 ][" latLng" ].HasMember (" lng" )) {
265- if (reader[" results" ][0 ][" locations" ][0 ][" latLng" ][" lng" ].IsNumber ()) {
266- *lon = reader[" results" ][0 ][" locations" ][0 ][" latLng" ][" lng" ].GetDouble ();
266+ if (reader[L " results" ][0 ][L " locations" ][0 ][L " latLng" ].HasMember (L " lng" )) {
267+ if (reader[L " results" ][0 ][L " locations" ][0 ][L " latLng" ][L " lng" ].IsNumber ()) {
268+ *lon = reader[L " results" ][0 ][L " locations" ][0 ][L " latLng" ][L " lng" ].GetDouble ();
267269 success &= true ;
268270 }
269271 }
@@ -276,10 +278,10 @@ bool GeoTools::GeocodeDeveloper(const wxString& address, double* lat, double* lo
276278 success = false ;// overrides success of retrieving data
277279 wxMessageBox (str, " geocode developer reset status code " );
278280
279- if (reader.HasMember (" info" )) {
280- if (reader[" info" ].HasMember (" statuscode" )) {
281- if (reader[" info" ][" statuscode" ].IsInt ()) {
282- success = reader[" info" ][" statuscode" ].GetInt () == 0 ;
281+ if (reader.HasMember (L " info" )) {
282+ if (reader[L " info" ].HasMember (L " statuscode" )) {
283+ if (reader[L " info" ][L " statuscode" ].IsInt ()) {
284+ success = reader[L " info" ][L " statuscode" ].GetInt () == 0 ;
283285 }
284286 }
285287 }
@@ -331,14 +333,14 @@ bool GeoTools::GeocodeDeveloper(const wxString& address, double* lat, double* lo
331333 reader.Parse (str.c_str ());
332334
333335 if (!reader.HasParseError ()) {
334- if (reader.HasMember (" resourceSets" )) {
335- if (reader[" resourceSets" ].IsArray ()) {
336- if (reader[" resourceSets" ][0 ].HasMember (" resources" )) {
337- if (reader[" resourceSets" ][0 ][" resources" ].IsArray ()) {
338- if (reader[" resourceSets" ][0 ][" resources" ][0 ].HasMember (" timeZone" )) {
339- if (reader[" resourceSets" ][0 ][" resources" ][0 ][" timeZone" ].HasMember (" utcOffset" )) {
340- if (reader[" resourceSets" ][0 ][" resources" ][0 ][" timeZone" ][" utcOffset" ].IsString ()) {
341- wxString stz = reader[" resourceSets" ][0 ][" resources" ][0 ][" timeZone" ][" utcOffset" ].GetString ();
336+ if (reader.HasMember (L " resourceSets" )) {
337+ if (reader[L " resourceSets" ].IsArray ()) {
338+ if (reader[L " resourceSets" ][0 ].HasMember (L " resources" )) {
339+ if (reader[L " resourceSets" ][0 ][L " resources" ].IsArray ()) {
340+ if (reader[L " resourceSets" ][0 ][L " resources" ][0 ].HasMember (L " timeZone" )) {
341+ if (reader[L " resourceSets" ][0 ][L " resources" ][0 ][L " timeZone" ].HasMember (L " utcOffset" )) {
342+ if (reader[L " resourceSets" ][0 ][L " resources" ][0 ][L " timeZone" ][L " utcOffset" ].IsString ()) {
343+ wxString stz = reader[L " resourceSets" ][0 ][L " resources" ][0 ][L " timeZone" ][L " utcOffset" ].GetString ();
342344 wxArrayString as = wxSplit (stz, ' :' );
343345 if (as.Count () != 2 ) return false ;
344346 if (!as[0 ].ToDouble (tz)) return false ;
@@ -359,9 +361,9 @@ bool GeoTools::GeocodeDeveloper(const wxString& address, double* lat, double* lo
359361 // check status code
360362 success = false ;// overrides success of retrieving data
361363
362- if (reader.HasMember (" statusDescription" )) {
363- if (reader[" statusDescription" ].IsString ()) {
364- wxString str = reader[" statusDescription" ].GetString ();
364+ if (reader.HasMember (L " statusDescription" )) {
365+ if (reader[L " statusDescription" ].IsString ()) {
366+ wxString str = reader[L " statusDescription" ].GetString ();
365367 success = str.Lower () == " ok" ;
366368 }
367369 }
0 commit comments