Come convertire (non necessariamente a livello di codice) tra Windows 'wchar_t e GCC / Linux?
Domanda
Supponiamo di avere questa stringa di Windows wchar_t:
L"\x4f60\x597d"
e
L"\x00e4\x00a0\x597d"
e vorrebbe convertirlo (non necessariamente a livello di programmazione; sarà una tantum) nel formato wchar_t GCC / Linux, che è UTF-32 AFAIK. Come lo faccio? (una spiegazione generale sarebbe utile, ma sarebbe utile anche un esempio basato su questo caso concreto)
Per favore, non indirizzarmi verso i siti di conversione dei personaggi. Vorrei convertire da L " \ x (qualcosa) " forma e non "carattere finale" modulo.
Soluzione
Una delle librerie più utilizzate per eseguire la conversione dei caratteri è la libreria ICU http://icu-project.org/ lo è ad es utilizzato da alcune librerie http://www.boost.org/ .
Altri suggerimenti
Conversione da UTF-16 (il modulo Visual C ++ wchar_t
) in UTF-8, quindi possibilmente da UTF-8 a UCS-4 (il modulo GCC wchar_t
), essere una risposta accettabile?
In tal caso, in Windows puoi utilizzare la funzione WideCharToMultiByte
(con CP_UTF8
per il parametro CodePage
), per la prima parte di la conversione. Quindi puoi incollare le stringhe UTF-8 risultanti direttamente nel tuo programma o convertirle ulteriormente. Qui è un messaggio che mostra come una persona l'ha fatto; puoi anche scrivere il tuo codice o farlo manualmente (le specifiche ufficiali, con una sezione su come convertire esattamente UTF-8 in UCS-4, possono essere trovate qui ). Potrebbe esserci un modo più semplice, non ho ancora familiarità con le cose di conversione in Linux.
Devi solo preoccuparti dei personaggi tra \ xD800 e \ xDFFF inclusive . Ogni altro personaggio dovrebbe mappare esattamente lo stesso da UTF-16 a UCS-4 quando è pieno zero.
Ignacio ha ragione, se non usi alcuni rari caratteri cinesi (o alcuni script estinti), allora la mappatura è uno a uno. (il "lingo" ufficiale è "quot" se non hai caratteri al di fuori di BMP ")
Questo è l'algoritmo, nel caso in cui: http://unicode.org/faq/utf_bom.html#utf16-3 Ma ancora una volta, molto probabilmente inutile per il tuo caso reale.
Puoi anche utilizzare le fonti gratuite di Unicode ( ftp://ftp.unicode.org / public / PROGRAMMI / CVTUTF )