tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
1009
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Bactunius Bactunius ist offline Rookie
    Registriert seit
    Oct 2011
    Beiträge
    5
    Ich habe ein C++-Projekt, welches ich nicht direkt mit Visual Studio 2010 baue. Als Konfigurationstyp habe ich "Makefile" ausgewählt und unter NMake, "Buildbefehlszeile" rufe ich eine bat-Datei auf, die dann das eigentliche Bauen vornimmt. Die Ausgabe landet im Ausgabe-Fenster von Visual Studio und genau in diesem habe ich das Problem.
    Rufe ich die Datei in der Konsole (z.b. "Visual Studio-Eingabeaufforderung") auf, ist die Ausgabe noch normal. "chcp" sagt 850 als Codepage. In Visual Studio wird hingegen scheinbar alles, was über 7Bit-ASCII ist, verändert. Zumindest wird z.B. ein » (0xAF) zu ┬╗. Die erstellte log-Datei ist UTF-8, indem diese Zeichen ┬╗ dann entsprechend als 0xE2 94 AC 0xE2 95 97 vorkommen.

    Meine Frage wäre nun, wie ich das Visual Studio Ausgabe-Fenster dazu bekomme, die Ausgaben korrekt wieder zu geben.
    Ich habe bereits im Internet gesucht, aber entweder finde ich nur wie man Erweiterungen für Visual Studio erstellt und dabei etwas in das Ausgabe-Fenster schreibt oder Dinge die noch weniger mit meinem Problem zu tun haben.

    Vielen Dank im Voraus,
    Bactunius

    PS: Ich war mir nicht sicher, ob ich das hier nach "Programmierung, C/C++, VS &MFC" packen sollte, oder ob es vllt. eher nach "Computer & Devices, Microsoft Windows" gehört.
     

  2. #2
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.806
    Blog-Einträge
    5
    Hallo Bactunius,

    auf welche Weise erfolgt denn die Ausgabe? Ich hab das grad mal selber ausprobiert und als Buildskript folgende Batch-Datei verwendet:
    Code :
    1
    2
    3
    
    @echo off
    chcp
    echo »
    Im Editor in der Codepage 850 gespeichert ergibt das sowohl in der Konsole als auch in Visual Studio die Ausgabe
    Code :
    1
    2
    
    Aktive Codepage: 850.
    »
    Auch im Buildlog, das in UTF-8 kodiert ist, wird das Zeichen richtig angezeigt.

    Kannst du vielleicht ein Minimalbeispiel erstellen, bei dem die Ausgabe bei dir nicht klappt?

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  3. #3
    Bactunius Bactunius ist offline Rookie
    Registriert seit
    Oct 2011
    Beiträge
    5
    Hallo,

    danke für die Antwort.

    Ich habe mal ein Minimalbeispiel erstellt. Die Bat-Datei entspricht dabei deiner Angabe. Bei der Ausgabe in Visual Studio erscheint dann bei mir:
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    [...]
    1>Build:
    1>  Aktive Codepage: 850.
    1>  ╗
    1>
    1>Das Erstellen war erfolgreich.
    [...]
    Als ich die Bat-Datei im Hex-Editor angesehen habe, viel mir auf, dass das Zeichen » nicht 0xAF, sondern 0xBB ist. Von Hand auf 0xAF geändert erscheint die Ausgabe auch in Visual Studio korrekt.
    Nun habe ich die Ausgabe der Konsole in eine Datei umgeleitet und » ist dort 0xC2 0xBB, also die UTF-8-Variante. Warum es bei Codepage 850 aber korrekt ausgegeben wird, weiß ich nicht so ganz. Es erklärt aber warum es bei Visual Studio so komisch aussieht, er wandelt die UTF-8-Ausgabe von 850 in UTF-8 um.
    Falls das Beispiel dennoch gewollt sein sollte habe ich es mal angehangen.

    Nun stellt sich mir allerdings die Frage, wie ich Visual Studio dazu bekommen anzunehmen, dass die Rückgabe UTF-8 ist. Ich habe es schon einmal mit "chcp 65001" am Anfang der Batch-Datei versucht, doch das hat ihn nicht interessiert, obwohl chcp dann immer 65001 als aktive Codepage ausgegeben hat.
    Anmerkung: Wenn ich übrigens "chcp 65001" in der Eingabeaufforderung verwende, funktioniert mein Bauen danach nicht mehr richtig.

    Gibt es also eine Möglichkeit, dass Visual Studio einfach nur die Rückgabe als UTF-8 Interpretiert und nicht erst konvertiert?

    Vielen Dank im Voraus,
    Bactunius
    Angehängte Dateien Angehängte Dateien
     

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.
    Zitat Zitat von Bactunius Beitrag anzeigen
    Als ich die Bat-Datei im Hex-Editor angesehen habe, viel mir auf, dass das Zeichen » nicht 0xAF, sondern 0xBB ist. Von Hand auf 0xAF geändert erscheint die Ausgabe auch in Visual Studio korrekt.
    Das liegt einfach daran, weil du die Datei im Windows CP-1252 ANSI Zeichensatz gespeichert hast. Du solltest aber eigentlich OEM CP-850 verwenden (so wie es in deiner Konsole eingestellt ist).
    Zitat Zitat von Bactunius Beitrag anzeigen
    Nun habe ich die Ausgabe der Konsole in eine Datei umgeleitet und » ist dort 0xC2 0xBB, also die UTF-8-Variante.
    Wie hast du das umgeleitet?
    Zitat Zitat von Bactunius Beitrag anzeigen
    Anmerkung: Wenn ich übrigens "chcp 65001" in der Eingabeaufforderung verwende, funktioniert mein Bauen danach nicht mehr richtig.
    Ja, leider funktionieren Batch Skripte mit UTF-8 nicht korrekt.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    Bactunius Bactunius ist offline Rookie
    Registriert seit
    Oct 2011
    Beiträge
    5
    Hallo,

    Zitat Zitat von deepthroat
    Wie hast du das umgeleitet?
    Das, was die Batch-Datei macht, habe ich "von Hand" in der Eingabeaufforderung gemacht. Wenn dann die wichtigen Programme aufgerufen werden, habe ich mittels
    Code :
    1
    
    Aufruf > ausgabe.txt
    die Ausgabe in eine Datei umgeleitet, welche ich mir dann mit Visual Studio Hex-Editor angesehen habe.
    Wenn ich nichts umleite sieht für mich die Ausgabe in der Eingabeaufforderung von der Batch-Datei und der von Hand gleich aus.

    Zitat Zitat von deepthroat
    Ja, leider funktionieren Batch Skripte mit UTF-8 nicht korrekt.
    Ich hatte es sowohl mit der Batch-Datei, als auch von Hand versucht. In beiden Fällen gibt das entscheidende Programm ein "Schreibfehler" aus, wa ich für eine ungünstige Übersetzung ins Deutsche halte.

    Vielen Dank im Voraus,
    Bactunius
     

  6. #6
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.

    Wo ist denn jetzt noch das Problem? Hast du die Batch Datei nun im Zeichensatz CP 850 gespeichert?
    Zitat Zitat von Bactunius Beitrag anzeigen
    Das, was die Batch-Datei macht, habe ich "von Hand" in der Eingabeaufforderung gemacht.
    Was hast du gemacht? Deine Beschreibung ist so nutzlos.

    Wenn ich bei mir
    Code :
    1
    2
    
    chcp >test.txt
    echo » >>test.txt
    manuell ausführe, steht in test.txt:
    Code :
    1
    2
    
    Active code page: 850
    »
    wobei "»" == 0xAF entspricht.
    Zitat Zitat von Bactunius Beitrag anzeigen
    Ich hatte es sowohl mit der Batch-Datei, als auch von Hand versucht. In beiden Fällen gibt das entscheidende Programm ein "Schreibfehler" aus, wa ich für eine ungünstige Übersetzung ins Deutsche halte.
    Was genau hast du ausgeführt, was wird für ein Programm aufgerufen, wie lautet die Fehlermeldung?

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  7. #7
    Bactunius Bactunius ist offline Rookie
    Registriert seit
    Oct 2011
    Beiträge
    5
    Hallo,

    danke für die Antwort.

    Zitat Zitat von deepthroat Beitrag anzeigen
    Wo ist denn jetzt noch das Problem?
    Ich baue mein Projekt nicht mit Visual Studio. Stattdessen habe ich eine Batch-Datei. Visual Studio habe ich so konfiguriert, dass es vom Konfigurationstyp "Makefile" ist und bei NMake wird die Batch-Datei aufgerufen. Diese Batch-Datei setzt dann die Entwicklungsumgebung auf und wirft das Bauen des Projektes an, indem er GNU Make aufruft.
    Das ganze funktioniert auch ganz schön, nur die Ausgaben von GNU Make im Ausgabe-Fenster von Visual Studio wird falsch angezeigt. In der Eingabeaufforderung (z.B. mit CP850) sieht die Ausgabe jedoch korrekt aus.

    Zitat Zitat von deepthroat Beitrag anzeigen
    Hast du die Batch Datei nun im Zeichensatz CP 850 gespeichert?
    In meinem letzten Beitrag hatte ich mich wieder auf die Original-Batch-Dateien, also die, die wirklich die Dateien erstellen, bezogen. Das habe ich allerdings vergessen zu erwähnen, Verzeihung.

    Zitat Zitat von deepthroat Beitrag anzeigen
    Was hast du gemacht? Deine Beschreibung ist so nutzlos.
    Anstatt die Erstellungs-Batch-Datei in der Eingabeaufforderung auszuführen habe ich den Inhalt entsprechend von Hand aufgerufen und beim Aufruf von GNU Make die Ausgabe dann in eine Datei umgeleitet (z.B. mittels "make > ausgabe.txt").
    Wenn es z.B. nichts bei make zu tun gibt, steht dann in der Datei, mit Hex-Editor betrachtet
    Code :
    1
    2
    3
    
    00000000   6D 61 6B 65 3A 20 46 C3  BC 72 20 64 61 73 20 5A   make: Für das Z
    00000010   69 65 6C 20 C2 BB 61 6C  6C C2 AB 20 69 73 74 20   iel »all« ist 
    00000020   6E 69 63 68 74 73 20 7A  75 20 74 75 6E 2E 0A      nichts zu tun.
    Falls ich es nicht in eine Datei umleite, sondern direkt in der Konsole ausgebe (während chcp ein "850" ausgibt), dann sehe ich es dort korrekt:
    Code :
    1
    
    make: Für das Ziel »all« ist nichts zu tun.
    Die Anzeige in Visual Studio gibt jedoch
    Code :
    1
    
    make: Für das Ziel »all« ist nichts zu tun.
    aus.
    Öffne ich die Build-Log-Datei mit dem Hex-Editor an sieht entsprechender Abschnitt wie folgt aus:
    Code :
    1
    2
    3
    4
    5
    
    00000140                                           6D 61 6B                mak
    00000150   65 3A 20 46 E2 94 9C E2  95 9D 72 20 64 61 73 20   e: F├╠r das 
    00000160   5A 69 65 6C 20 E2 94 AC  E2 95 97 61 6C 6C E2 94   Ziel ┬╗allâ”
    00000170   AC C2 BD 20 69 73 74 20  6E 69 63 68 74 73 20 7A   ¬Â½ ist nichts z
    00000180   75 20 74 75 6E 2E                                  u tun.
    Ich hoffe, alle Varianten kommen im Browser raus.

    Sollte das Problem nur bei "nichts zu tun" auftreten, wäre es nicht so schlimm. Jedoch tritt das Problem auch auf, wenn Fehler im Code sind, die Fehlermeldungen sind dann ziemlich unleserlich.

    Zitat Zitat von deepthroat Beitrag anzeigen
    Was genau hast du ausgeführt, was wird für ein Programm aufgerufen, wie lautet die Fehlermeldung?
    Wie oben, habe ich die Erstellung-Batch-Datei per Hand eingegeben. Nachdem ich die Umgebung aufgesetzt habe, habe ich z.B. folgendes gemacht:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    P:\code>chcp
    Aktive Codepage: 850.
     
    P:\code>make
    make: Für das Ziel »all« ist nichts zu tun.
     
    P:\code>chcp 65001
    Aktive Codepage: 65001.
     
    P:\code>chcp
    Aktive Codepage: 65001.
     
    P:\code>make
    make: Schreibfehler
     
    P:\code>chcp
    Aktive Codepage: 65001.
     
    P:\code>chcp 850
    Aktive Codepage: 850.
     
    P:\code>make
    make: Für das Ziel »all« ist nichts zu tun.
     
    P:\code>

    Habe ich es diesmal geschafft das Problem verständlich auszudrücken? Sind die Informationen ausreichend? Ich habe versucht, diesmal jegliche Interpretation meinerseits weg zu lassen.
    Gibt es Lösungsideen?

    Vielen Dank im Voraus,
    Bactunius
     

  8. #8
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Zitat Zitat von Bactunius Beitrag anzeigen
    Ich baue mein Projekt nicht mit Visual Studio. Stattdessen habe ich eine Batch-Datei. Visual Studio habe ich so konfiguriert, dass es vom Konfigurationstyp "Makefile" ist und bei NMake wird die Batch-Datei aufgerufen. Diese Batch-Datei setzt dann die Entwicklungsumgebung auf und wirft das Bauen des Projektes an, indem
    er GNU Make aufruft.
    OMG. Warum? Warum?

    Schau dir mal CMake (oder z.B. premake) an. Damit kann man ordentliche Visual Studio Projekte generieren lassen, und GNU Makefiles und mehr. Make unter Windows ist doch langsam ohne Ende.

    Probiere in der Batch Datei mal
    Code :
    1
    
    set LANG=C
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  9. #9
    Bactunius Bactunius ist offline Rookie
    Registriert seit
    Oct 2011
    Beiträge
    5
    Hallo,

    bei dem Projekt bin ich auf Vorgaben angewiesen und deshalb gezwungen das so zu machen. Ich bin auch nicht glücklich darüber.

    Die Angabe führt dazu, dass Visual Studio nun
    make: Nothing to be done for `all'.
    ausgibt. Auch die Fehler sind leserlich.

    Vielen Dank!
    Bactunius
     

Ähnliche Themen

  1. Ausgabe von text, wert etc. in Ausgabefenster
    Von schuetzejanett im Forum VisualStudio & MFC
    Antworten: 2
    Letzter Beitrag: 01.12.08, 08:25
  2. JS-Code nur noch gehackstückel, Codierungs-Problem?
    Von multimolti im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 30.08.07, 21:15
  3. Ausgabefenster deaktivierbar?
    Von Orphelina im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 27.06.05, 10:23
  4. HTML Ausgabefenster
    Von RienSte im Forum .NET Archiv
    Antworten: 3
    Letzter Beitrag: 03.03.05, 12:48
  5. Debugging Meldungen in Ausgabefenster
    Von flotschie im Forum .NET Archiv
    Antworten: 3
    Letzter Beitrag: 03.01.05, 12:45