iconv
è una funzione POSIX che può occuparsi della fase di codifica intermedia. È possibile utilizzare iconv_open
per specificare che si dispone di input UTF-8 e che si desidera l'output UTF-16. Quindi, utilizzando l'handle restituito da iconv_open
, è possibile utilizzare iconv
(specificando il buffer di input e il buffer di output). Quando si è fatto è necessario chiamare iconv_close
sulla maniglia tornato da iconv_open
a liberare risorse ecc
Si dovrà esaminare la documentazione del sistema su ciò codifiche sono supportati da iconv
e il loro schema di denominazione (vale a dire quello di fornire iconv_open
). Ad esempio, iconv
su alcuni sistemi si aspettano "utf-8"
e altri si può aspettare "UTF8"
ecc
di Windows non fornisce una versione di iconv, e invece fornisce è di possedere funzioni di formattazione UTF: MultiByteToWideChar e 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);
Quindi posso dire che l'utilizzo di wchar_t per UTF-16 in piattaforma Windows è solo una questione di scelta per comodità, in teoria è possibile utilizzare in modo assoluto UTF-16? – Hunter
@Hunter: In teoria si, ma in Windows, 'wchar_t' è usato per UTF-16, e' char' per ASCII e UTF-8. –
Su Windows, 'wchar_t' ha una dimensione nota di 16 bit –