Così ho finalmente ottenuto di nuovo al mio compito principale - porting piuttosto grande progetto C++ da Windows a Mac.stringhe multipiattaforma (e Unicode) in C++
Subito Sono stato colpito dal problema in cui wchar_t è di 16-bit per Windows, ma a 32-bit su Mac. Questo è un problema perché tutte le stringhe sono rappresentate da wchar_t e ci saranno dati di stringhe che vanno avanti e indietro tra macchine Windows e Mac (sia nei dati su disco sia nei moduli dati di rete). A causa del modo in cui funziona, non sarebbe del tutto semplice convertire le stringhe in un formato comune prima di inviare e ricevere i dati.
Abbiamo anche iniziato a supportare molte più lingue di recente e quindi stiamo iniziando a gestire molti dati Unicode (oltre a trattare con le lingue da destra a sinistra).
Ora, potrei essere una confusione fra molteplici idee qui e causando più problemi per me del necessario ed è per questo che sto chiedendo a questa domanda. Pensiamo che memorizzare tutti i dati delle stringhe in memoria come UTF-8 abbia molto senso. Risolve il problema con wchar_t di dimensioni diverse, significa che possiamo facilmente supportare più lingue e riduce drasticamente anche il nostro footprint di memoria (abbiamo un sacco di - per lo più in inglese - stringhe caricate) - ma non sembra che molte persone stiano facendo Questo. C'è qualcosa che ci manca? C'è il problema ovvio che devi affrontare in cui la lunghezza della stringa può essere inferiore alla dimensione della memoria che memorizza i dati della stringa.
O sta usando UTF-16 un'idea migliore? O dovremmo attenerci a wchar_t e scrivere codice per convertire tra wchar_t e, diciamo, Unicode in posti dove leggiamo/scriviamo sul disco o sulla rete?
Mi rendo conto che è pericolosamente vicino a chiedere pareri - ma siamo nervosi che stiamo trascurando qualcosa di ovvio perché non sembra che ci siano molte classi di stringhe Unicode (per esempio) - ma tuttavia c'è un sacco di codice per la conversione in/da Unicode come in boost :: locale, iconv, utf-cpp e ICU.
solo una parola da dire. http://utf8everywhere.org –