Come ha detto @AkiRoss, è necessario utilizzare le impostazioni locali. In generale, in qualsiasi programma si scrive, una delle prime azioni in main
dovrebbe essere quello di impostare il locale globale per la scelta degli utenti, facendo qualcosa come:
std::locale::global(std::locale(""));
Questo dovrebbe essere sistematico , nel ogni programma che interagisce con con un utente umano. Tutti i file aperti dopo questo saranno automaticamente impregnati con le impostazioni internazionali corrette.
In alternativa, è possibile specificare in modo esplicito il locale che si desidera uso:
std::locale::global(std::locale(locale_name));
Il problema di questo è che non esiste uno standard per il locale nomi. Qualcosa come "it_IT.UTF-8"
corrisponde allo standard Posix e viene utilizzato su Internet; Windows ha tradizionalmente utilizzato un formato diverso (anche se Windows recente sembra che accetti anche questo formato).
che lascia std::cin
, std::cout
e std::cerr
.Questi sono aperti prima di inserire main
e quindi devono essere imbevuti della nuova locale . (Per ottenere una copia della corrente locale globale, utilizzare il costruttore di default di std::locale
.)
Infine, se si sta aprendo tutti i file binari, essere consapevoli del fatto che essi anche saranno impregnati con il locale globale. Quale può fare la traduzione di codice . In tali casi, dovresti renderli esplicitamente con std::locale::classic()
oppure creare una nuova locale unendo la faccetta di std::locale::classic()
con le altre faccette delle impostazioni internazionali globali. (std::locale
ha funzioni speciali e costruttori per questo.)
fonte
2013-03-05 10:47:41
Intendi, nel codice? Come 'double x = 3,14;'? –
No in uscita standard, input, lettura e scrittura di file in fase di esecuzione (non in fase di compilazione). –
una parola: locales. – PlasmaHH