Su piattaforme diverse da Windows è possibile utilizzare facilmente le stringhe char *
e trattarle come UTF-8.Come gestire le stringhe Unicode in C/C++ in modo cross-platform friendly?
Il problema è che su Windows è necessario accettare e inviare messaggi utilizzando wchar * stringhe (W). Se utilizzerai le funzioni ANSI (A) non supporterai Unicode.
Quindi, se si vuole scrivere applicazioni veramente portatile è necessario compilarlo come Unicode su Windows.
Ora, per mantenere pulito il codice mi piacerebbe vedere quale sia il modo consigliato di gestire le stringhe, un modo che minimizzi la bruttezza nel codice.
Tipo di stringhe potrebbe essere necessario: std::string
, std::wstring
, std::tstring
, char *
, wchat_t *
, TCHAR*
, CString
(ATL uno).
problemi che potrebbero verificarsi:
cout/cerr/cin
e la loro Unicode variantiwcout,wcerr,wcin
- tutte le funzioni rinominati ampi archi e le loro macro TCHAR - come
strcmp
,wcscmp
e_tcscmp
. - stringhe costanti all'interno del codice, con TCHAR si dovrà compilare il codice con
_T()
macro.
Quale approccio ritiene migliore? (esempi sono i benvenuti)
Personalmente vorrei andare per un approccio std::tstring
ma mi piacerebbe vedere come farebbe alle conversioni dove sono necessarie.
http://utf8everywhere.org spiega tutto. –