Sonderzeichen in Strings



  • Zum Öffnen von Dateien solltest du auf Windows grundsätzlich Wide-Character Strings oder std::filesystem::path verwenden. Dann stellt sich die Frage der Codepage nicht. Bzw. nur dort wo zwischen 8-Bit und "wide" konvertiert werden muss. Was man z.B. nicht muss wenn man die Pfade per Command-Line Argument übergeben bekommt oder wenn die Pfade hard-coded sind.



  • @hustbaer sagte in Sonderzeichen in Strings:

    Zum Öffnen von Dateien solltest du auf Windows grundsätzlich Wide-Character Strings oder std::filesystem::path verwenden. Dann stellt sich die Frage der Codepage nicht. Bzw. nur dort wo zwischen 8-Bit und "wide" konvertiert werden muss. Was man z.B. nicht muss wenn man die Pfade per Command-Line Argument übergeben bekommt oder wenn die Pfade hard-coded sind.

    genau an der Stelle hänge ich noch fest std::filesystem::path hate ich noch nicht gesehen aber wie ich es lese funktioniert es mit meinen Momenten Compiler nicht MiniGW,
    Daher bin ich wie auch auf der Seite beschrieben an der wstring als Eingabe ran was mir dabei nur nicht gelingt ist die Konvertierung damit ich es in fstream nutzen kann, da werden keine char_t sondern nur char nutzt.



  • Dafür gibt es dann auch die entsprechenden "wide-string" Klassen: wfstream, wifstream, wofstream, ..



  • @Nokman sagte in Sonderzeichen in Strings:

    wstring als Eingabe ran was mir dabei nur nicht gelingt ist die Konvertierung damit ich es in fstream nutzen kann

    Der fstream Konstruktor der MSVC Standard Library akzeptiert wchar_t* als Pfad. Also falls es darum geht. Wenn das die Standard Library von MinGW nicht kann, dann ist diese unter Windows schlecht brauchbar. Du bist dann auf die 8-Bit CodePage des Systems eingeschränkt.

    Falls es um die Ausgabe in den Stream geht: wenn du dort Wide-Strings brauchst, dann ist das doof. wfstream könntest du dir ansehen, könnte sein dass man damit brauchbar arbeiten kann. Kann ich nix dazu sagen, ausser dass du aufpassen solltest ob dabei dann auch wirklich die garantiert gewünschte CodePage im File landet.

    Was MinGW angeht: kannst du das Tool nicht auf z.B. MSVC portieren? Damit hättest du einen modernen Compiler mit Support für C++17 inklusive std::filesystem.



  • @Th69 sagte in Sonderzeichen in Strings:

    Dafür gibt es dann auch die entsprechenden "wide-string" Klassen: wfstream, wifstream, wofstream, ..

    Dies beziehen sich beim Öffnen auch wieder auf fstream bzw so wie ich es verstehe
    candidate function not viable: no known conversion from 'std::__cxx11::wstring' (aka 'basic_string<wchar_t>') to 'const char *' for 1st argument



  • Wie gesagt, die Standard Library von MS hat hier einen passenden Konstruktor:
    https://docs.microsoft.com/en-us/cpp/standard-library/basic-ifstream-class?view=msvc-160#basic_ifstream


Anmelden zum Antworten