0

I am calling a SOAP service in my Javascript code, and the response of this service is correct but strings returned does not show letters with accents. So, I have a problem with encoding charset and I am trying the following actions:

1) I ensure that the HTTP response returning string data has the correct charset defined. So, I have checked with https://validator.w3.org/i18n-checker/ that the encoding charset of the URI that I am calling is "utf-8".

2) I have defined charset in the head section of html:

<meta charset='utf-8' content-type="text/xml;charset=UTF-8"/>

3) Also, I call this service with a function in module.js, I have also defined

<script src="node_modules/my_module.js" charset="utf-8"></script>

All three with the same wrong result. I added an image with the some examples: image with result strings, where in green square have to say 'Sant Martí de Tous', in red 'Moianès', in blue 'Santa Bàrbara', 'Montsià', in orange 'Torroella de Montgrí', etc

This is a minimum sample code to call SOAP service with tinysoap library:

<!DOCTYPE html>
<html>
  <head>
    <meta charset='utf-8' content-type="text/xml; charset=utf-8"/>
    <title>Test Charset Encoding</title>

    <link rel="stylesheet" href="https://js.arcgis.com/4.15/esri/themes/light/main.css"/>

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script src="node_modules/tinysoap/tinysoap-browser-min.js"></script>
    <script src="https://js.arcgis.com/4.15/"></script>

    <script>
        var tinySoap=this.tinysoap;

        require(["esri/Map"], function(Map) { 
          var inputCtrl  = document.getElementById("inputString"); // gironès
          var outputCtrl = document.getElementById("outputString"); 

          inputCtrl.onchange = function() {
              var userTxtValue = inputCtrl.value;
              var args = {nom: userTxtValue};

              //console.log("[INPUT] : ",args);
              //outputCtrl.innerHTML = "<br><b>Input ... </b>" + userTxtValue +"<br>";

              tinySoap.createClient(url, function(err, client){
                  client.localitzaToponim(args, function(err, result) {
                      var data = result['item'];

                      //console.log("[OUTPUT] : ",data);
                      //outputCtrl.innerHTML += "<b>Output ... </b>";
                      //data.forEach(element => {
                      //    outputCtrl.innerHTML +=  "<br>      "+ element.Nom;
                      //});

                  });
              });
          }
          });
    </script>
  </head>

  <body>
    Look for place or address ...
    <input id="inputString" size="50" value=""><br>
    <span id="outputString"></span>
  </body>
</html>

This is the result of this process for 'gironès' as input string There is the error: "Refused to set unsafe header", but I can not see where to set header parameters to connection.

I am still working in that problem: I have checked that strings are encoded as UTF16 with this library: https://github.com/polygonplanet/encoding.js/ using Encoding.detect(string), but Encoding.convert(string,'utf8','utf16') does not work for me, neither Encoding.convert(string,'latin1','utf16'), etc

What is the right way to define the encoding charset? Thank you

  • Please [edit] the question and share a garbled text along with its correct equivalent (non-trivial string with at least 2..3 garbled accented letters). – JosefZ May 23 '20 at 21:06
  • Thanks for your time @JosefZ, I have just added some examples. – user3446944 May 25 '20 at 06:29
  • Does this answer your question? [How to set character encoding in SOAP request](https://stackoverflow.com/questions/33752787/how-to-set-character-encoding-in-soap-request). Otherwise, share a [mcve] please. – JosefZ May 25 '20 at 10:20
  • Thanks for your suggestion @JosefZ but I am working with tinySoap.js library (https://github.com/mhzed/tinysoap) to connect with SOAP service, so I haven't option to set enconding charset in HttpURLConnection. I am going to prepare some code lines to share. Thanks! – user3446944 May 25 '20 at 13:28

0 Answers0