MinGW Unicode?



  • Unterstützt MinGW überhaupt UNICODE-Sourcecodes?

    Ich hab jetzt z.B. eine cpp-Datei im unicode-Format (16Bit littleendian) erstellt. MinGW kann diese nicht laden und melden ungültige Zeichen...

    Gibt es einen Schalter oder kann MinGW generell nicht mit Unicode-Dateien umgehen?



  • Meines Wissens unterstützt MinGW keine Wide String Implementation.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • groovemaster schrieb:

    Meines Wissens unterstützt MinGW keine Wide String Implementation.

    Wenn das wirklich so wäre, dann ist das ja ein k.o. Kriterium...



  • Jochen Kalmbach schrieb:

    groovemaster schrieb:

    Meines Wissens unterstützt MinGW keine Wide String Implementation.

    Wenn das wirklich so wäre, dann ist das ja ein k.o. Kriterium...

    Nur die wenigsten Leute brauchen Unicode Unterstützung.



  • wchar_t != Unicode. Wollt ich nur mal gesagt haben.



  • Es geht in diesem Thread nicht um wchar_t, wstring oder ähnliches. Wollt ich nur mal gesagt haben.



  • Um was dann? C++-Sourcecode muss von den benutzten Zeichen her sowieso ASCII sein (ist übrigens bei UTF-8 automatisch gegeben), ausgenommen die Kommentare. Demnach muss es um Stringliterale gehen und die sind entweder char oder wchar_t (L""). Letzteres unterstützt MinGW afaik (hab grad keinen zur Hand) nicht. Mit dem Lesen von Dateien in einer Unicode-Kodierung sollte er aber keine Probleme haben.



  • gesagt schrieb:

    Es geht in diesem Thread nicht um wchar_t, wstring oder ähnliches. Wollt ich nur mal gesagt haben.

    Und mit was würdest du dann 16 Bit Unicode implementieren? Double char Containern? 🙄
    Der Standard legt ja die verwendbaren Zeichen für Source Files fest. AFAIK hält sich MinGW auch daran. Also kein 16 Bit Unicode.



  • Jochen Kalmbach schrieb:

    groovemaster schrieb:

    Meines Wissens unterstützt MinGW keine Wide String Implementation.

    Wenn das wirklich so wäre, dann ist das ja ein k.o. Kriterium...

    Als GCC Derivat sollte es Unicode über wchar_t definitiv unterstützen, die Frage ist eher, ob es aktuellen Unicode (utf-32) unterstützt oder das veraltete Windows Zeugs (UCS-2), wie der MVC++ :p

    quatsch schrieb:

    Nur die wenigsten Leute brauchen Unicode Unterstützung.

    hmm, alle Englisch-Sprachler kommen perfekt mit ASCII aus. Okay die meisten europäischen Sprachen kann man ja noch über die ISO 8859-x Sachen emulieren. Aber die Welt besteht nicht nur aus Europa, USA und Australien 🙄



  • Hallo,

    Aber die Welt besteht nicht nur aus Europa, USA und Australien

    Kommt mit aber manchmal anders vor.

    Habe einmal gehört der MinGW unterstützt kein Unicode. Soll aber einen Patch dafür geben. Oder ich bin einfach nur gerade Müde 🙄.

    MFG winexec*



  • Ich dachte hier geht es darum das der Threadstarter seine C++ Quellcode-Dateien in Unicode Codierung abgespeichert hat.



  • ja... also MinGW unterstützt natürlich L"string" und wchar_t - jedoch konnte ich keinen Code kompilieren,der in Unicode gespeichert war... ich dachte es gibt dafür einen Schalter oder sowas... Sinn würde das nur bei Kommentaren und bei Strings machen...



  • Das Problem dürfte eher sein, dass du UTF-16 benutzt hast. Der GCC und daher auch der MinGW erwartet 8Bit breite Zeichen. Daher solltest du hier UTF-8 benutzen.



  • nö mit UTF-8 gehts auch nicht



  • Aber sowas von.
    Wie sieht der Code aus, was ist die Fehlermeldung und wie lautet die Ausgabe von g++ --version ?



  • da steht dann, das die ersten zeichen der datei ungültig sind (unicode dateien sind am anfang mit 2 zeichen codiert deren werte über 128 liegen)



  • So, habe es auch mal mit UTF-8 und UCS-2 getestet (MinGW 3.4.5). Beides wird nicht akzeptiert. Ich gehe deshalb davon aus, wie ich bereits oben schrieb, dass sich MinGW strikt an den Standard hält und nur den dort definierten Zeichensatz akzeptiert.



  • In Kommentaren und Stringliteralen schluckt der GCC aber definitiv UTF-8

    #include <stdio.h>
    #include <string.h>
    
    int main() {
      char const *utf8str="üäö";
      printf("%zu %s %x %x\n", strlen(utf8str), utf8str, utf8str[0], utf8str[1]);
    }
    

    Gibt bei mir

    6 üäö ffffffc3 ffffffbc
    

    aus

    Naja, bei Bezeichnern ist es vom C++-Standard her wohl nicht erlaubt 😞



  • Naja, das hat ja nix mit Bezeichnern ansich zu tun.
    Ich denke, das wird wohl eher als erweiteres ASCII interpretiert und dann uU gewrappt, um dem Wertebereich von char zu entsprechen. Die stdlib Implementation von printf wird wahrscheinlich genauso arbeiten.


Log in to reply