Это может быть излишним, но библиотеки ICU сделают все, что вам нужно, и вы можете использовать их как в Windows, так и в Linux.
Однако, если вы хотите только преобразование, топод Windows простой вызов MultiByteToWideChar
и WideCharToMultiByte
может выполнить преобразование между UTF-8 и
UTF-16.Например:
// utf-8 to utf-16
MultiByteToWideChar( CP_UTF8, 0, myUtf8String, -1,
myUtf16Buf, lengthOfUtf16Buf );
В Linux libidn может делать то, что вам нужно.Он может конвертировать между UTF-8 и UCS, что, на мой взгляд, эквивалентно UTF-32 на некотором уровне.Например:
// utf-8 to UCS
ucsStr = stringprep_utf8_to_ucs4( "asdf", 4, &items );
Однако в Linux я думаю, что вам лучше всего просто работать с UTF-8.Если у вас нет существующей библиотеки для UTF-16, я не уверен, что есть веская причина использовать ее в Linux.