Although I'm interested to hear the possible solutions to my problem below, I just wanted to note that I received a message from another mailing list (mozilla-embedding@mozilla.org) explaining how to convert from UTF-16 to UTF-8 using the Mozilla string API, and that worked. Thanks.
On Sun, 3 Apr 2005, Scott Lanning wrote:
I'm wrapping a method that returns UTF-16 strings. My understanding is that these should be converted to UTF-8 before returning them, but I'm not sure how that should be done. I don't really have much of an understanding of Unicode, nor really of XS.
If it helps, what I have so far is (this is a method for Mozilla's nsIDOMEvent GetType method, and PRUnichar is a 16-bit character):
## GetType(nsAString & aType)
const char *
moz_dom_get_type (event)
nsIDOMEvent *event;
PREINIT:
nsEmbedString u16container; /* nsEmbedString implements nsAString */
const PRUnichar *u16str;
const char *u8str;
CODE:
event->GetType(u16container); /* pass by reference */
u16str = u16container.get();
/* convert from utf-16 to utf-8 */ u8str = ...?
RETVAL = u8str; OUTPUT: RETVAL
I think that Encode can be used to go from UTF-16 to UTF-8, but I don't see any typemap that handles UTF-16. (I'm not sure if that statement makes sense.)
