Wie @AkiRoss sagte, müssen Sie Gebietsschemas verwenden. Im Allgemeinen in jedem Programm, das Sie das globale Locale an die Benutzer Wahl, indem so etwas wie eingestellt sein schreiben, eine der ersten Aktionen in main
sollte:
std::locale::global(std::locale(""));
Dies sollte systematisch , in jede Programm, das mit einem menschlichen Benutzer interagiert. Alle danach geöffneten Dateien werden automatisch mit dem korrekten Gebietsschema versehen.
Alternativ können Sie explizit das Gebietsschema angeben, die Sie verwenden möchten:
std::locale::global(std::locale(locale_name));
Das Problem dabei ist, dass es keinen Standard für locale Namen. So etwas wie "it_IT.UTF-8"
entspricht dem Posix Standard und wird im Internet verwendet; Windows hat traditionell ein anderes Format verwendet (obwohl die letzten Windows scheinen dieses Format auch akzeptieren).
Welche Blätter std::cin
, std::cout
und std::cerr
.Diese sind geöffnet, bevor Sie main
eingeben, und muss daher mit dem neuen Gebietsschema durchdrungen sein. (Wenn Sie eine Kopie des aktuellen globalen locale zu erhalten, verwenden der Standardkonstruktor von std::locale
.)
Schließlich, wenn Sie alle Binärdateien sind Öffnen, bewusst sein, dass sie wird auch mit dem globalen locale durchdrungen werden. Was kann Code Übersetzung tun. In solchen Fällen sollten Sie sie explizit mit std::locale::classic()
einbetten oder ein neues Gebietsschema erstellen, indem Sie die Facette des codecvt
von std::locale::classic()
mit den anderen Facetten des globalen Gebietsschemas zusammenführen. (std::locale
hat spezielle Funktionen und Konstruktoren dafür.)
Sie meinen, in Code? Wie 'doppeltes x = 3,14;'? –
Nein in Standardausgabe, Eingabe, Lesen und Schreiben von Dateien zur Laufzeit (nicht zur Kompilierzeit). –
ein Wort: Gebietsschemas. – PlasmaHH