Domanda

L'estensione di questo domande su locali
E descritto in questa domanda : Quello che volevo fare era installare una sfaccettatura codecvt nel locale che comprende i file UTF-16.

ho potuto scrivere il mio. Ma io non sono un esperto di UTF e come tale sono sicuro che avrei avuto quasi corretto; ma si spezzerebbe al momento più inopportuno. Così mi chiedevo se ci sono delle risorse (sul web) di pre-compilazione codecvt (o altro) sfaccettature che possono essere utilizzati da C ++ che sono peer reviewed e testati?

Il motivo è l'impostazione internazionale predefinita (sul mio sistema Mac OS X 10.6) durante la lettura di un file solo converte 1 byte a 1 wchar_t senza alcuna conversione. Così UTF-16 file codificati vengono convertiti in wstrings che contengono un sacco di nullo ( '\ 0') caratteri.

È stato utile?

Soluzione

Non sono sicuro se per "risorse sul Web" si intendono disponibili gratuitamente, ma v'è la Dinkumware Conversioni Biblioteca che suona come si adatta alle vostre esigenze, a condizione che la biblioteca può essere integrato in vostra suite compilatore.

I tipi codecvt sono descritti nella sezione Codice conversioni .

Altri suggerimenti

Al C ++ 11, ci sono ulteriori specializzazioni codecvt standard e tipi, destinati per la conversione tra vari UTF- x e UCS x sequenze di caratteri; uno di questi può soddisfare le vostre esigenze.

In <locale>:

  • std::codecvt<char16_t, char, std::mbstate_t>: Converte tra UTF-16 e UTF-8
  • .
  • std::codecvt<char32_t, char, std::mbstate_t>: Converte tra UTF-32 e UTF-8
  • .

In <codecvt>:

  • std::codecvt_utf8_utf16<typename Elem>: Conversione di UTF-8 e UTF-16, dove UTF-16 punti di codice vengono memorizzati come Elem specificato (si noti che se viene specificato char32_t, un solo punto di codice memorizzate al char32_t).
    • Ha due supplementari, paramters in default template (unsigned long MaxCode = 0x10ffff, e std::codecvt_mode Mode = (std::codecvt_mode)0), ed eredita da std::codecvt<Elem, char, std::mbstate_t>.
  • std::codecvt_utf8<typename Elem>: Converte tra UTF-8 e sia UCS2 o UCS4, a seconda Elem (UCS2 per char16_t, UCS4 per char32_t, dipendente dalla piattaforma per wchar_t).
    • Ha due supplementari, paramters in default template (unsigned long MaxCode = 0x10ffff, e std::codecvt_mode Mode = (std::codecvt_mode)0), ed eredita da std::codecvt<Elem, char, std::mbstate_t>.
  • std::codecvt_utf16<typename Elem>: Converte tra UTF-16 e uno o UCS2 UCS4, a seconda Elem (UCS2 per char16_t, UCS4 per char32_t, dipendente dalla piattaforma per wchar_t).
    • Ha due supplementari, paramters in default template (unsigned long MaxCode = 0x10ffff, e std::codecvt_mode Mode = (std::codecvt_mode)0), ed eredita da std::codecvt<Elem, char, std::mbstate_t>.

codecvt_utf8 e codecvt_utf16 convertirà tra l'UTF specificato e sia UCS2 o UCS4, a seconda delle dimensioni del Elem. Pertanto, wchar_t specificherà UCS2 sui sistemi in cui è 16- a 31-bit (come Windows, dove è a 16 bit), o UCS4 sui sistemi in cui è almeno 32 bit (come Linux, dove è 32-bit), indipendentemente dal fatto stringhe wchar_t effettivamente utilizzare la stessa codifica; su piattaforme che utilizzano diverse codifiche per archi wchar_t, questo sarà comprensibilmente causare problemi se non si sta attenti.

Per ulteriori informazioni, vedere CPP Riferimento:

Si noti che il supporto per intestazione codecvt è stato aggiunto solo per libstdc++ tempi relativamente recenti. Se si utilizza una versione precedente di Clang o di GCC, potrebbe essere necessario utilizzare libc++, se si desidera utilizzarlo.
Si noti che le versioni di Visual Studio precedenti al 2015 in realtà non supportano char16_t e char32_t; se esistono questi tipi precedenti versioni, sarà come typedef rispettivamente per unsigned short e unsigned int,. Si noti inoltre che le vecchie versioni di Visual Studio possono avere problemi conversione di stringhe tra codifiche UTF volte, e che Visual Studio 2015 ha un problema tecnico che impedisce codecvt da lavorare correttamente con char16_t e char32_t, richiedendo l'uso di tipi integrali stesse dimensioni invece

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