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.