Hi Ludovic,

> I'm trying to implement functions that convert a string in the current
> locale encoding to its UTF-{16,32} representation, for a given
> endianness.

This kind of task is outside of the scope of the uniconv/* modules.
'unistr' and 'uniconv' deal wih UTF-{8,16,32} as an internal representation
of strings in memory; therefore they assume machine-dependent endianness
and alignment - and therefore can access every unit in a single memory
access.

If the endianness or alignment is different, the code needs to access
every unit byte after byte; this is not the way it's done in the 'unistr'
and 'uniconv' libraries.

Therefore I would recommend to use the mem_cd_iconveh function from the
'striconveh' module, with FROMCODE = locale_charset() and TOCODE =
"UTF-16BE" or "UTF-16LE" (or vice versa). Or mem_iconveh you don't
want to reuse the conversion descriptors.

The str_cd_iconveh and str_iconveh functions are not usable here because they
look for the end of string via strlen().

I recommend the 'striconveh' module here over the 'striconv' module, because
it will work even with Solaris iconv() which can convert from anything to
UTF-8 and vice versa, but cannot convert directly e.g. between ISO-8859-2
and UTF-16LE. The 'striconveh' module does the conversion in two steps in
such a case.

Bruno



Reply via email to