Is there a suitable datatype to use as the contents of a GValue, which the dbus-glib bindings will understand natively? Shoehorning this stuff into GValue whose type is G_TYPE_STRING sounds bad; the first 0 byte will cause the bindings to think that the "string" is finished, and UTF-8 enforcement will probably choke on this method anyway.