C++ - Set Locale über das gesamte Programm
I"m der Suche nach einem Weg, um das Gebietsschema festgelegt, die über das gesamte Programm, wenn das"s noch möglich.
Ich das Gebietsschema in meiner main-Funktion wie folgt:
int main()
{
setlocale(LC_ALL, "");
....
return 0;
}
Aber es doesn"t setzen Sie die locale auf meine verschiedenen Klassen/Methoden, die über das gesamte Programm. I"d eher nicht schreiben, diese Zeile oben auf jeder Methode, die gedruckt werden auf dem Bildschirm und das erstellen einer C++ - locale-Objekt und übergeben Sie es um nicht ganz das Gefühl akzeptabel.
Vielen Dank für Ihre Zeit.
setlocale
bereits global, für die Dinge, die es eigentlich zu beeinflussen. Welche Arten von Sachen sind diejenigen, die andere Methoden verwenden? Soweit ich mich erinnere,setlocale
wirkt sich auf die älteren "C-like" - APIs, aber nicht die touch-Sachen wiecout
- und C++ - streams.- Ich habe eine Klasse die aus einer Datei gelesen und cout einige von dessen Inhalt. Es ist verschütten mich Müll, weil einige Buchstaben Akzente. setlocale set in der main, aber nicht scheint auf, dass die zweite Klasse.
- Das ist nicht spezifisch genug, um auszuschließen, zahlreiche Möglichkeiten... Man könnte mit etwas, das setlocale nicht beeinflussen, wie std::fstream sind. Oder das Problem möglicherweise mit cout und die Konsole. Oder Ihre Datei die Daten in einer Codierung, die nicht konvertiert werden, die Art und Weise, die Sie erwarten. Etc. An diesem Punkt denke ich sollte man entweder die Bearbeitung dieser Frage oder post eine neue Abdeckung das eigentliche problem, du bist und poste den code, wie Sie das Lesen der Datei und das senden der Daten durch cout.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den zwei Funktionen, ändern von globalen locale-Einstellungen sind std::setlocale und std::locale::global. Alle zukünftigen C-und C++ - I/O-und string-manipulation mit Ihnen, außer für die sechs standard-I/O C++ - streams, die gebaut werden, bevor der code ausgeführt wird, so können Sie verleihen Ihnen die individuell, wenn es so gewünscht wird:
std::locale::global()
wirkt sich auf die C locale als gut. Die anderen sind korrekt.setlocale verwendet zum festlegen der locale-Einstellung, aber sein Anwendungsbereich, wenn beschlossen durch den ersten parameter (d.h. flag), die wir passieren. In deinem Fall "LC_ALL".
Gibt es zwei Möglichkeiten, um das Gebietsschema festgelegt. Also, als pro Verhalten von setlocale, wenn Sie den zweiten parameter als "" oder NULL wird, wird der Standardwert aus der system-Umwelt (
LANG
). Code für Referenz als unten:Die andere Möglichkeit ist die Verwendung der locale, wie folgt:
Code Abbildung