Your problem is the InputStreamReader. You should be explicitly telling it what charset to use instead of using the platform default, which is not what you want. Ideally, you should be reading the Content-Type header and using that to pick the charset intead of hardcoding utf-16 (LE or BE?).
To clarify your thoughts about Java using utf-16 internally, you are correct, but the issue is that you need to convert bytes to characters and that has nothing to do with how Java internally handles String.
Also, you might want to think about using utf-8 as that tends to be the default unicode encoding on the web.