@jdillon charset is only relevant for text types isn't it? So it seems we should ignore bad charset for non-text types. In our example case, we are told _application/zip_ as mime-type.

HTTP/1.1 tells us we should only guess if mime-type is not given.

http://tools.ietf.org/html/rfc2616#section-7.2.1

"Any HTTP/1.1 message containing an entity-body SHOULD include a
   Content-Type header field defining the media type of that body. **If
   and only if the media type is not given by a Content-Type field, the
   recipient MAY attempt to guess the media type via inspection of its
   content and/or the name extension(s) of the URI used** to identify the
   resource. If the media type remains unknown, the recipient SHOULD
   treat it as type "application/octet-stream".