Почему эти файлы PNG отличаются? (Происходят из одного источника) - PullRequest
2 голосов
/ 10 июня 2011

В моей программе есть веб-приложение, которое создает изображение в формате PNG.Это PNG-изображение записывается в файл и возвращается в запросе.Когда я записываю запрос в файл, он отличается от того, который был первоначально записан на жесткий диск, когда они должны быть точно такими же.PNG из ответа - просто пустое изображение.(я полагаю, это повреждено).

Я использовал двоичную программу сравнения для сравнения двух файлов PNG и обнаружил, что некоторые символы в ответном PNG были просто заменены шестнадцатеричным значением 3F вместо их реальных значений.

Вот изображение diff: Diff Image

Кажется, что ответ превращает некоторые значения HEX в 3F, почему это так?И есть ли способ заставить его перестать делать это.

Чтобы быть более точным в том, как был создан этот ответ, была использована FileRepresentation (из RESTlet), чтобы получить файл PNG и поместить его в ответ.Я использовал тип файла RESTlet MEDIATYPE_PNG.

Ответы [ 3 ]

4 голосов
/ 11 июня 2011

Шаблон, который я вижу здесь, состоит в том, что во всех случаях измененные байты исходного изображения не отображаются в ASCII и, по-видимому, были заменены на 3F, который является ASCII '?', Общим символом, используемым для замены неотображаемых символов.

2 голосов
/ 11 июня 2011

Как говорит Кармаказе, кажется, что кто-то вмешивается в кодировку, интерпретируя ее как текстовый файл и заменяя «запрещенные» символы на «?»голец.В частности, «исправленные» точки соответствуют не только не-точкам, но и (нескольким) неиспользуемым символам в кодировке Win-1252 (81, 8D, 8F, 90 и 9D).Все указывает на то, что кто-то интерпретирует двоичный контент как текст, возможно, в какой-то среде Windows.

1 голос
/ 13 июня 2011

Я нашел проблему.Я получил доступ к ответу неправильно.с помощью response.getEntity.getText () он не дает точного строкового представления, так как некоторые значения из файла не являются частью диапазона ascii.Он заменил "?"с теми значениями, которые не находятся в диапазоне ASCII.

Так что вместо этого я просто получил поток байтов с помощью response.getEntity (). getStream () из него, и все работает отлично.

Спасибовсе!

...