summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorDarryl L. Pierce <mcpierce@apache.org>2013-02-12 20:36:19 +0000
committerDarryl L. Pierce <mcpierce@apache.org>2013-02-12 20:36:19 +0000
commit1c93d1bd8b92e36052dd5cae721b920d155244cb (patch)
tree968c22cc3da1b1274ecb3de41f51610425e61443 /cpp
parent3689b6933d37b91a07ced8e64172d38be876b4ba (diff)
downloadqpid-python-1c93d1bd8b92e36052dd5cae721b920d155244cb.tar.gz
QPID-4544: Perl bindings now support UTF8 encoding
Modifies the swig bindings to properly work with UTF8 encoded strings. Contributed by: Jimmy Jones <jimmyjones2@gmx.co.uk> git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1445344 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp')
-rw-r--r--cpp/bindings/qpid/perl/t/Message.t7
-rw-r--r--cpp/bindings/swig_perl_typemaps.i9
2 files changed, 15 insertions, 1 deletions
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 : {