iconv
es una función POSIX que puede ocuparse del paso de codificación intermedia. Puede usar iconv_open
para especificar que tiene entrada UTF-8 y que desea la salida UTF-16. Luego, usando el identificador devuelto desde iconv_open
, puede usar iconv
(especificando su buffer de entrada y buffer de salida). Cuando haya terminado debe llamar iconv_close
en el mango de regresar de iconv_open
liberar recursos etc.
Usted tendrá que leer detenidamente la documentación del sistema acerca de lo codificaciones son apoyados por iconv
y su esquema de nombres (es decir, lo que proporcionan iconv_open
). Por ejemplo, en algunos sistemas iconv
esperan "utf-8"
y otros puede esperar "UTF8"
etc.
Windows no proporciona una versión de iconv, y en su lugar ofrece a sus propias funciones de formato UTF: MultiByteToWideChar y 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);
Así que puedo decir que el uso de wchar_t para UTF-16 en la plataforma Windows es sólo una cuestión de elección por conveniencia, puede utilizar absolutamente carbón para UTF-16 en la teoría? – Hunter
@Hunter: En teoría sí, pero en Windows, 'wchar_t' se usa para UTF-16 y' char' para ASCII y UTF-8. –
En Windows, 'wchar_t' tiene un tamaño conocido de 16 bits –