From 1c93d1bd8b92e36052dd5cae721b920d155244cb Mon Sep 17 00:00:00 2001 From: "Darryl L. Pierce" Date: Tue, 12 Feb 2013 20:36:19 +0000 Subject: QPID-4544: Perl bindings now support UTF8 encoding Modifies the swig bindings to properly work with UTF8 encoded strings. Contributed by: Jimmy Jones git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1445344 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/bindings/qpid/perl/t/Message.t | 7 +++++++ cpp/bindings/swig_perl_typemaps.i | 9 ++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) (limited to 'cpp') diff --git a/cpp/bindings/qpid/perl/t/Message.t b/cpp/bindings/qpid/perl/t/Message.t index 142e1719b3..c191eaad5a 100644 --- a/cpp/bindings/qpid/perl/t/Message.t +++ b/cpp/bindings/qpid/perl/t/Message.t @@ -259,6 +259,13 @@ my $map = qpid::messaging::decode_map($message); ok ($map->{name} eq "With\x00null", "Nulls embedded in map values work."); +# Unicode strings shouldn't be broken +$content = { id => 1234, name => "Euro=\x{20AC}" }; +qpid::messaging::encode($content, $message); +$map = qpid::messaging::decode_map($message); +ok ($map->{name} eq "Euro=\x{20AC}", + "Unicode strings encoded correctly."); + # content size # content size is correct my $content_size = int(rand(256)); diff --git a/cpp/bindings/swig_perl_typemaps.i b/cpp/bindings/swig_perl_typemaps.i index b703844482..7730b69ce7 100644 --- a/cpp/bindings/swig_perl_typemaps.i +++ b/cpp/bindings/swig_perl_typemaps.i @@ -49,7 +49,11 @@ else if (SvPOK(value)) { STRLEN len; char *ptr = SvPV(value, len); - return qpid::types::Variant(std::string(ptr, len)); + qpid::types::Variant v = qpid::types::Variant(std::string(ptr,len)); + if (SvUTF8(value)) { + v.setEncoding("utf8"); + } + return v; } } return qpid::types::Variant(); @@ -98,6 +102,9 @@ case qpid::types::VAR_STRING : { const std::string val(v->asString()); result = newSVpvn(val.c_str(), val.size()); + if( v->getEncoding() == "utf8" ) { + SvUTF8_on(result); + } break; } case qpid::types::VAR_MAP : { -- cgit v1.2.1