I think what your example with input stream does, is telling InputStreamReader to read bytes as UTF-8, while in reality file contains another encoding. So when you read it, it doesn’t match. If that assumption is correct, possible solutions would be either to convert file to UTF-8, or tell InputStreamReader to use iso-8859-1.
Cheers,
Askar