Ha senso scegliere UTF-32, in base alla preoccupazione che alcune regole di base vengano interrotte per UTF-8?

5

Sto lavorando su un progetto C ++ multipiattaforma, che non considera Unicode, e ho bisogno di modifiche per supportare unicode.

Seguono due scelte e devo decidere quale scegliere.

  • Uso di UTF-8 (std :: string) che faciliterà il supporto del sistema posix.
  • Uso di UTF-32 (std :: wstring) che renderà più semplice la chiamata all'API di Windows.

Quindi per l'articolo n. 1 UTF8, il vantaggio è che il cambio di codice non sarà eccessivo. Ma la preoccupazione è che alcune regole di base vengano interrotte per UTF8, ad esempio,

  • string.size () non sarà uguale alla lunghezza del carattere.
  • cercare un '/' nel percorso sarà difficile da implementare (non sono sicuro al 100%).

Quindi più esperienza? E quale dovrei scegliere?

    
posta ZijingWu 17.04.2014 - 12:06
fonte

1 risposta

24

Utilizza UTF-8. string.size() non sarà uguale alla quantità di punti di codice , ma è comunque una metrica inutile. In quasi tutti i casi, dovresti preoccuparti del numero di caratteri / glifi percepiti dall'utente (e per quello, l'UTF-32 fallisce altrettanto male), o del numero di byte di memoria utilizzata (per questo, UTF-32 non offre alcun vantaggio e utilizza più byte per l'avvio).

La ricerca di un carattere ASCII, come / , sarà in realtà più semplice rispetto ad altre codifiche, perché puoi semplicemente utilizzare qualsiasi routine di ricerca basata su byte / ASCII (anche vecchio C strstr se hai 0 terminatori). UTF-8 è progettato in modo tale che tutti i caratteri ASCII utilizzino la stessa rappresentazione di byte in UTF-8 e nessun carattere non ASCII condivide alcun byte con qualsiasi carattere ASCII.

L'API di Windows utilizza UTF- 16 e UTF-16 non offre nemmeno% co_de. Inoltre condivide tutti i lati negativi di UTF-32, più o meno. Inoltre, fare in modo che l'applicazione gestisca Unicode probabilmente non sarà così semplice come fare tutte le stringhe UTF- {8,16,32}; Il buon supporto Unicode può richiedere una logica complicata come la normalizzazione del testo, gestendo bene i code code stupidi (può diventare una sicurezza problema per alcune applicazioni), rendendo le manipolazioni di stringhe come slicing e iterazione funzionano con glifi o punti di codice invece di byte, ecc.

Ci sono più motivi per usare UTF-8 (e motivi per non usare UTF- {16,32}) di quanto possa ragionevolmente descrivere qui. Per favore fai riferimento al manifesto UTF-8 se hai bisogno di essere più convincente.

    
risposta data 17.04.2014 - 12:26
fonte

Leggi altre domande sui tag