Verloren im Labyrinth der Zeichen-Codes



  • Hallo liebe Forengemeinde,

    ich bin grad total verwirrt über die verschiendenen Zeichencodes:
    Ich habe ein Programm geschrieben, dass andere Dateien als Resource in eine .exe packen kann. Das funktioniert so:
    Das als Resource genutze Programm wird geöffnet, binär eingelesen in einen char-Array gepackt und dann mit einem einfach int-Cast umgewandelt. Danach soll das int-Array in den eigtl. Quellcode eingefügt werden. Sieht dann so aus:

    char myResource[] = {
         64, 65, 66, 67, /*viele andere Zahlen*/
    };
    

    Nun wird dieses char-Array, wenn die Resource genutzt werden soll, wieder in eine Datei geschrieben und damit wurde die Resource in einer .exe transportiert. Soweit die Theorie. In der Praxis habe ich jetzt Komplikationen mit den Zeichencodes.

    Frage:
    Welche Kodierung hat die Resource, die ich praktisch binär einlese? Ich habe erstmal auf UTF8 getippt.
    Wenn ich nun das gesamte char-Array über ein toUtf8() wieder umwandle in die Datei schreibe, ist die entstandene Datei nur ca. 1% so groß wie die ursprüngliche.
    Was genau ist denn jetzt mit diesen Codes: Latin1, UTF8, UTF16, ASCII usw. Was mache ich falsch?

    PS: Die int-Werte einiger Zeichen sind sogar negativ oO

    Danke für eure Hilfe 👍



  • Haste beim binären Einlesen aich ios::binary angegeben?
    Und schreibst mit write, damit Du nicht über eine '\0' stolperst?
    Falls ja, klappt Dein Plan so.



  • Zum einlesen nutze ich ne Wrapperfunktion von Qt, die liest ein sog. QByteArray ein, dass ist also binär(biite nicht ins Qt Forum schieben, da dass weniger damit zu tun hat).
    Folgendes habe ich grad getestet:
    Das Ergebnis einer Testdatei, die eine solche Tabelle enthält sieht so aus:
    original:

    32
          !   33
          "   34
          #   35
          $   36
          %   37
          &   38
          '   39
          (   40
          )   41
          *   42
    usw.
         ¢   162
          £   163
          ¤   164
          ¥   165
          ¦   166
          §   167
          ¨   168
          ©   169
          ª   170
          «   171
          ¬   172
          ­   173
          ®   174
          ¯   175
    usw.
    

    und dann die Resource, nachdem sie wieder ausgespuckt wurde:

    32
          !   33
          "   34
          #   35
          $   36
          %   37
          &   38
          '   39
          (   40
          )   41
          *   42
    usw.
    aber ab ASCII-Code Nummer 128
          �   128
          �   129
          �   130
          �   131
          �   132
          �   133
          �   134
          �   135
          �   136
          �   137
          �   138
          �   139
          �   140
    

    Das deutet doch auf den UTF8-16 Konflikt hin?! Aber was ist denn nun mit den negativen ASCII-Nummern...Wo sind die drin?



  • Und mit was schreibst Du?
    (Es ist natürlich ein Qt-Problem, aber ich schiebe Dich mal nicht weg, sondern warte, Bis Du es selber sagst. 🙂 )
    UTF8 oder so ist nicht angeraten. Einfach binär bleiben und bei char bleiben. Oder unsigned char, damit Dich die negativen Zahlen nicht verwirren.



  • Ok wenn du meinst, dass die Qt Leute mehr Ahnung haben, wäre es nett, wenn du mich verschiebst. Dachte mir nur, dass es ja mit den ganzen Zeichencodes zu tun hat, dass mir jemand aus der normalen C++Ecke helfen könnte^^



  • OK habs hinbekommen. Local8Bit() ist die richtige Kodierung.



  • Sind Ressourcen nicht eh binär? Ein Bild wird wohl kaum so eine Kodierung haben. Oder gehe ich das jetzt zu sehr von WinAPI Kram aus und Ressourcen sind hier nur Texte?



  • Das war ja mein Problem^^ Das wusste ich auch nicht


Log in to reply