2 Stimmen

Kodierung beim Schreiben einer txt-Datei mit ofstream erzwingen

Ich schreibe eine txt-Datei mit ofstream, aus verschiedenen Gründen sollte die Datei lokale Kodierung und nicht UTF8 haben. Der Rechner, der die Datei verarbeitet, hat andere Lokalisierungen als das lokale Ziel.

Gibt es eine Möglichkeit, die Kodierung beim Schreiben einer Datei zu erzwingen?

Grüße,

Ilan

2voto

Mourad Punkte 404

Sie können anrufen std::ios::imbue zu Ihrem ofstream Objekt, um das Gebietsschema zu ändern. Dies hat keine Auswirkungen auf das globale Gebietsschema.

std::ofstream os("output.txt");
std::locale mylocale(""); 
os.imbue(mylocale);
os << 1.5f << std::endl;
os.close();

Achten Sie auf das Argument von std::locale Konstruktor, er ist von der Implementierung abhängig. Zum Beispiel könnte das deutsche Gebietsschema :

std::locale mylocale("de_DE"); 

o

std::locale mylocale("German");

0voto

MSalters Punkte 166675

Da es sich um ein Windows-System handelt, haben Sie ohnehin kein UTF8. Aber was genau schreiben Sie denn da? Normalerweise haben Sie eine std::string im Speicher und schreiben diese auf die Festplatte. Der einzige Unterschied ist, dass \n im Speicher wird in CR/LF übersetzt ( \r\n ) auf der Festplatte. Das ist überall die gleiche Übersetzung.

Sie könnten in eine Situation geraten, in der Sie eine std::wstring . In diesem Fall wird es durch das Gebietsschema bestimmt. Die Standard-Sprachumgebung ist die C-Sprachumgebung, auch bekannt als std::locale("C") or std::locale::classic() . The local encoding (which you seem to want) is std::locale("")`.

Es gibt noch andere Schauplätze; siehe aquí

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X