En plataformas diferentes a Windows, puede usar fácilmente las cadenas char *
y tratarlas como UTF-8.¿Cómo lidiar con cadenas Unicode en C/C++ de una manera compatible con plataformas cruzadas?
El problema es que en Windows debe aceptar y enviar mensajes utilizando wchar * strings (W). Si usará las funciones de ANSI (A) no admitirá Unicode.
Así que si quieres escribir una aplicación realmente portátil, debes compilarla como Unicode en Windows.
Ahora, para mantener el código limpio me gustaría ver cuál es la forma recomendada de tratar con cadenas, una manera de minimizar la fealdad en el código.
Tipo de cuerdas que puede necesitar: std::string
, std::wstring
, std::tstring
, char *
, wchat_t *
, TCHAR*
, CString
(ATL uno).
Problemas que pueden surgir:
cout/cerr/cin
y sus variantes Unicodewcout,wcerr,wcin
- todas las funciones cambiado el nombre de ancho de cuerda y sus macros TCHAR - como
strcmp
,wcscmp
y_tcscmp
. - cadenas constantes dentro del código, con TCHAR tendrá que completar su código con
_T()
macros.
¿Qué enfoque considera que es el mejor? (ejemplos son bienvenidos)
Personalmente, me gustaría un enfoque std::tstring
, pero me gustaría ver cómo haría las conversiones donde son necesarios.
http://utf8everywhere.org lo explica todo. –