Come convertire (non necessariamente a livello di codice) tra Windows 'wchar_t e GCC / Linux?

StackOverflow https://stackoverflow.com/questions/236125

  •  04-07-2019
  •  | 
  •  

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.

È stato utile?

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 )

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