summaryrefslogtreecommitdiff
path: root/qpid/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
commit803cc4e4a8b3a26b6f35808a142a3dbaf06bf29e (patch)
tree3e359140febb96c20e7084745be231aeeabf6d63 /qpid/cpp
parent631f31a401f308e93303d5cc3a60f03f4c5eca34 (diff)
downloadqpid-python-803cc4e4a8b3a26b6f35808a142a3dbaf06bf29e.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@1445344 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp')
-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 : {