diff options
| -rw-r--r-- | qpid/cpp/bindings/qpid/perl/t/Message.t | 7 | ||||
| -rw-r--r-- | qpid/cpp/bindings/swig_perl_typemaps.i | 9 |
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 : { |
