Hallo,
vielen Dank für die Antworten. Am Header liegt es auf jeden Fall nicht. Ich habe mittlerweile herausgefunden, dass es wohl daran liegt, dass der Browser die Bytes als ASCII-Zeichen anders interpretiert.
Ich habe mal am Beispiel einer Bilddatei Original und Übertragung im Hex-Editor angeschaut und festgestellt, dass fast alle Werte identisch sind bis auf einige Ausnahmen. An diesen Stellen war der Wert in der Originaldatei entweder #84 (132), #8C (140), #94 (148) oder #9C (156) und in der fehlerhaften Datei auf #3F (63) gesetzt.
Diese Werte werden alle zum Zeichen ?, wenn man das gelesene Byte nach char castet. Unter Linux werden wohl sogar noch mehr Werte mit ? dargestellt. Kann man da irgendwie einen festen Zeichensatz bestimmen?