iconv 是一个 POSIX 函数,可以处理中间编码步骤。您可以使用 iconv_open 指定您有 UTF-8 输入并且您想要 UTF-16 输出。然后,使用从iconv_open 返回的句柄,您可以使用iconv(指定您的输入缓冲区和输出缓冲区)。完成后,您必须在从 iconv_open 返回的句柄上调用 iconv_close 以释放资源等。
您必须仔细阅读系统文档,了解iconv 支持哪些编码及其命名方案(即提供iconv_open 的内容)。例如,某些系统上的iconv 需要"utf-8",而其他系统可能需要"UTF8" 等。
Windows 不提供 iconv 版本,而是提供了自己的 UTF 格式化函数:MultiByteToWideChar 和 WideCharToMultiByte。
//UTF8 to UTF16
std::string input = ...
int utf16len = MultiByteToWideChar(CP_UTF8, 0, input.c_str(), input.size(),
NULL, 0);
std::wstring output(utf16len);
MultiByteToWideChar(CP_UTF8, 0, input.c_str(), input.size(),
&output[0], output.size());
//UTF16 to UTF8
std::wstring input = ...
int utf8len = WideCharToMultiByte(CP_UTF8, 0, input.c_str(), input.size(),
NULL, 0, NULL, NULL);
std::string output(utf8len);
WideCharToMultiByte(CP_UTF8, 0, input.c_str(), input.size(),
&output[0], output.size(), NULL, NULL);