Setzt man nun bei OTRS auf seine UTF-8 Features, dann stellt man fest, das der Hersteller dies zwar als Feature nennt, die SOAP Schnittstelle allerdings ausgeklammert ist. Dies liegt im Endeffekt auch nicht am Hersteller von OTRS sondern die SOAP::Lite Komponente macht einem hier ein Strich durch die Rechnung. Die eingesetzte Routine zum Encodieren eines Strings nach Base64 unterstützt nämlich kein UTF-8, ist doch Base64 auch per se nur für Single-Byte-Charsets ausgelegt.
Damit liegt auch ein Lösungsansatz nahe. Der Base64 encodierung sollte UTF-8 'beigebracht' werden. Die CPAN Seite führt bereits diesen Lösungsansatz in den Beispielen auf:
Code: Select all
use MIME::Base64 qw(encode_base64);
use Encode qw(encode);
$encoded = encode_base64(encode("UTF-8", "\x{FFFF}\n"));
print $encoded;
Code: Select all
sub as_base64Binary {
my $self = shift;
my($value, $name, $type, $attr) = @_;
require MIME::Base64;
require Encode;
return [$name, {'xsi:type' => 'xsd:base64Binary', %$attr}, MIME::Base64::encode_base64(Encode::encode("UTF-8", $value),'')];
}