summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--qpid/cpp/bindings/qpid/perl/t/Message.t7
-rw-r--r--qpid/cpp/bindings/swig_perl_typemaps.i9
2 files changed, 15 insertions, 1 deletions
diff --git a/qpid/cpp/bindings/qpid/perl/t/Message.t b/qpid/cpp/bindings/qpid/perl/t/Message.t
index 142e1719b3..c191eaad5a 100644
--- a/qpid/cpp/bindings/qpid/perl/t/Message.t
+++ b/qpid/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/qpid/cpp/bindings/swig_perl_typemaps.i b/qpid/cpp/bindings/swig_perl_typemaps.i
index b703844482..7730b69ce7 100644
--- a/qpid/cpp/bindings/swig_perl_typemaps.i
+++ b/qpid/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 : {