You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by mc...@apache.org on 2013/02/12 21:36:19 UTC

svn commit: r1445344 - in /qpid/trunk/qpid/cpp/bindings: qpid/perl/t/Message.t swig_perl_typemaps.i

Author: mcpierce
Date: Tue Feb 12 20:36:19 2013
New Revision: 1445344

URL: http://svn.apache.org/r1445344
Log:
QPID-4544: Perl bindings now support UTF8 encoding

Modifies the swig bindings to properly work with UTF8 encoded strings.

Contributed by: Jimmy Jones <ji...@gmx.co.uk>

Modified:
    qpid/trunk/qpid/cpp/bindings/qpid/perl/t/Message.t
    qpid/trunk/qpid/cpp/bindings/swig_perl_typemaps.i

Modified: qpid/trunk/qpid/cpp/bindings/qpid/perl/t/Message.t
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/qpid/perl/t/Message.t?rev=1445344&r1=1445343&r2=1445344&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/qpid/perl/t/Message.t (original)
+++ qpid/trunk/qpid/cpp/bindings/qpid/perl/t/Message.t Tue Feb 12 20:36:19 2013
@@ -259,6 +259,13 @@ my $map = qpid::messaging::decode_map($m
 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));

Modified: qpid/trunk/qpid/cpp/bindings/swig_perl_typemaps.i
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/bindings/swig_perl_typemaps.i?rev=1445344&r1=1445343&r2=1445344&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/bindings/swig_perl_typemaps.i (original)
+++ qpid/trunk/qpid/cpp/bindings/swig_perl_typemaps.i Tue Feb 12 20:36:19 2013
@@ -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 : {



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org