DreamT has asked for the wisdom of the Perl Monks concerning the following question:

Hi!
I've created a webservice solution for placing orders in a system. It works well, except for that i can't get umlauts (å,ä,ö) to work correctly. SOAP::Lite creates the field
<City xsi:type="xsd:base64Binary">SnVra2FzasOkcnZp</City>
from the code
... $City = "Säffle"; ... push @AdressValues, SOAP::Data->name('City' => "$City"); ...

(Actually, the $City value is first fetched from a text file, but I get the same result when simplifying it as above)
So, of course this is an encoding problem. But, how do I solve it? The original encoding of the $City-string is probably latin1.

Replies are listed 'Best First'.
Re: SOAP::LITE and umlauts = Binary??
by Anonymous Monk on Sep 02, 2009 at 12:39 UTC
    perl soapumlaut.pl |xml_pp
    #!/usr/bin/perl -- use strict; use warnings; use SOAP::Lite; use SOAP::Lite 0.65 +trace => 'debug'; use Encode; print SOAP::Lite->new->serializer->envelope( method => 'DreamT', ## xsd:base64Binary # SOAP::Data->new(City => q!Säffle!), # SOAP::Data->name( "City" => encode('UTF-8',q!Säffle!)), ## not well-formed (invalid token) # SOAP::Data->type("xsd:string")->name( "City" => q!Säffle!), ## perfect SOAP::Data->type("xsd:string")->name( "City" => encode('UTF-8', +q!Säffle!)), ); __END__ <?xml version="1.0" encoding="UTF-8"?> <soap:Envelope soap:encodingStyle="http://schemas.xmlsoap.org/soap/enc +oding/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns: +soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http:/ +/www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSche +ma-instance"> <soap:Body> <DreamT> <City xsi:type="xsd:string">Säffle</City> </DreamT> </soap:Body> </soap:Envelope>
      Thank you! That ALMOST made my day..:-)
      I'm outputting the debug data to a textfile. When I use the utf-8 encoding i Get
      <City xsi:type="xsd:string">Säffle</City>

      and when I disable it I get this
      <City xsi:type="xsd:string">Säffle</City>

      Is this because of the logfile itself, or will it look like this when I post it into the webservice? The Logfile itself is created with Perl and gets populated with CGI::Carp.