diff options
| author | Darryl L. Pierce <mcpierce@apache.org> | 2013-02-12 20:36:19 +0000 |
|---|---|---|
| committer | Darryl L. Pierce <mcpierce@apache.org> | 2013-02-12 20:36:19 +0000 |
| commit | 1c93d1bd8b92e36052dd5cae721b920d155244cb (patch) | |
| tree | 968c22cc3da1b1274ecb3de41f51610425e61443 /cpp | |
| parent | 3689b6933d37b91a07ced8e64172d38be876b4ba (diff) | |
| download | qpid-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.t | 7 | ||||
| -rw-r--r-- | cpp/bindings/swig_perl_typemaps.i | 9 |
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 : { |
