As Magesh points out, the readStreamString method is implemented correctly. It is not intended to transform a stream into a named character set but to read in a stream already in that character set. How we determine that character set seems to be the issue.
I don't know enough about internationalised character sets to know whether 'guessing' is guaranteed to work. My guess would be that it isn't and that any utility is a 'best attempt' rather than a guarantee, but we should definitely check that out.
If we cannot rely on a Content-Type header or equivalent, either because the value is incorrect or cannot be determined from the XML, then I think it would be safer for us to provide a fallback mechanism and allow the type to be specified/overridden (as Magesh sugegsted) rather than trying to guess it.
Kev