You are reading in a GIF89a file as one integer per byte, and then printing it out as if it were a text string. The main problem is that the integers (bytes) within that file do not actually map to meaningful text characters, so where the mapping fails to render portions of the alphabet, it will render whatever your text encoding dictates (which looks to me like a lot of garbage).
Graphical information does not always map cleanly to text. While there are 256 possible byte values, and sometimes one or more bytes will represent a single character, there are only 26 letters in the English alphabet, which are represented in upper and lower case. Along with the ten digits and a handful of punctuation, you get about 80 different characters which are in common use in an essay. The rest of the 160+ characters are control codes, signals to use multi-bytes, or mappings to characters present to support display of foreign languages.
That garbage is the closest thing to the valid bytes to characters mapping for your current character set. If you want a better output, then try reading a file that contains data which maps to something character related.