Domanda

quando il porting mio progetto di Visual C ++ per GCC, ho scoperto che il tipo di dati wchar_t è di 4 byte UTF-32 per impostazione predefinita. Ho potuto ignorare che con un opzione di compilatore, ma poi il tutto wc * (wcslen, wcscmp, ecc) parte di RTL è reso inutilizzabile, in quanto presuppone ampie stringhe di 4 byte.

Per il momento, ho reimplementata 5-6 di queste funzioni da zero e #defined miei implementazioni in Ma c'è un opzione più elegante -. Per esempio, una build di GCC RTL con qualche 2 byte wchar-t tranquillamente seduto , in attesa di essere collegati?

I sapori specifici del GCC che sto cercando sono Xcode su Mac OS X, Cygwin, e quello che viene fornito con Debian Etch Linux.

È stato utile?

Soluzione 4

reimplementato 5-6 di WC più comuni * funzioni, #defined miei implementazioni in.

Altri suggerimenti

  

Ma c'è un opzione più elegante - per esempio, una build di GCC RTL con 2 byte wchar-t tranquillamente seduto da qualche parte, in attesa di essere collegati

No. Questo è un problema piattaforma specifica, non è un problema di GCC.

Vale a dire, i specifica piattaforma Linux ABI che wchar_t è ampio 32 bit, quindi o è necessario utilizzare una nuova libreria (per i quali ICU è una scelta popolare), o la porta il codice per gestire 4 byte wchar_ts. Tutte le librerie che si potrebbe collegare a assumerà anche un wchar_t 4 byte, e pausa se si utilizza -fshort-wchar di GCC.

Ma su Linux in particolare, quasi tutti hanno standardizzato su UTF-8 per tutte le codifiche multibyte.

Guardate il ICU biblioteca . Si tratta di una libreria portabile con un'API UTF-16.

Come avete notato, wchar_t è definito implementazione. Non v'è alcun modo di lavoro portatile con quel tipo di dati.

sistemi Linux in generale aveva il vantaggio di guadagnare il supporto Unicode più tardi, dopo che l'intera UCS-2 debacle è stato dichiarato non-così-grande idea, e l'uso UTF-8 come codifica. Tutte le API di sistema operano ancora sul char *, e sono Unicode sicuri.

I tuoi migliori scommesse sono di utilizzare una libreria che gestisce questo per voi:. Qt, ICU, etc

Si noti che cygwin dispone di un wchar_t 2 byte per fare ingranare con Windows più facile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top