为什么这些PNG文件不同?(源自同一来源)

时间:2011-06-10 18:26:46

标签: java png response restlet

在我的程序中,我有一个创建PNG图像的Web应用程序。此PNG图像将写入文件并在请求中返回。当我将请求写入文件时,它与最初写入硬盘驱动器的文件应该完全相同时不同。响应中的PNG只是一个空白图像。 (我猜它是腐败的。)

我使用二进制diff程序来区分两个PNG文件,发现响应PNG中的一些字符只是用十六进制值3F而不是它们的实际值替换。

这是差异的图像: Diff Image

似乎响应是将一些HEX值变为3F,为什么会这样?有没有办法让它停止这样做。

为了更具体地说明如何创建响应,使用FileRepresentation(来自RESTlet)获取PNG文件并将其放入响应中。我使用RESTlet文件类型MEDIATYPE_PNG。

3 个答案:

答案 0 :(得分:4)

我在这里看到的模式是,在所有情况下,更改的源图像字节都是ASCII不可显示的,并且似乎已被3F替换,这是一个ASCII'?',一个用于替换不可显示字符的常用字符。 / p>

答案 1 :(得分:2)

正如karmakaze所说,似乎有人正在搞乱编码,将其解释为文本文件并用“?”替换“禁止”字符。焦炭。具体地,“校正”的点不仅对应于非ascii点,而且对应于Win-1252编码(81,8D,8F,90和9D)中的(少数)未使用的字符。一切都指向某人将二进制内容解释为文本,可能在某些Windows环境中。

答案 2 :(得分:1)

我发现了这个问题。我以错误的方式访问响应。通过使用response.getEntity.getText(),它不提供准确的字符串表示,因为文件中的某些值不是ascii范围的一部分。它取代了“?”那些不在ascii范围内的值。

所以我只是通过使用response.getEntity()。getStream()得到一个字节流,一切正常。

全部谢谢!