将String转换为Stream时,默认编码为UTF-8可能会带来什么后果?

问题描述

| 我需要将从某些API获得的字符串转换为其他API消耗的InputStream。唯一的方法是在不知道确切编码的情况下将String转换为Stream。因此,我认为它是UTF-8,并且现在可以正常使用。但是,鉴于我无法识别字符串源的编码,我想知道对此有什么更好的解决方案。     

解决方法

对于不知道编码的问题,没有好的解决方案。 因此,您必须要求明确指定编码,否则必须使用一种严格遵守的统一协议编码。 另外,请确保对InputStreamReader使用稀有形式的构造方法,该形式会在编码错误时引发异常。那是
InputStreamReader(InputStream in,CharsetDecoder dec)
。根据您的观点或目的,其他三个是损坏的或不恰当的设计,因为它们抑制了编码错误并使程序不可靠且不可移植。 对于丢失的错误要特别小心,尤其是当您不确定自己要得到什么时,甚至即使您认为自己做得到的事情也是如此:)。     ,应用错误编码的可能后果是从另一端获取错误数据。 具体后果将取决于具体编码。例如,如果您收到一个ISO-8859-1字符流,并尝试使用UTF-8进行解码,则由于序列不正确,您可能会出错。如果您以UTF-16开头并假定它是ISO-8859-1,则将得到的字符数是您期望的两倍,而其他字符将是垃圾。     ,编码不是Java中Strings的属性,仅当您在Strings和byte之间转换时它们才有意义。如果这些API为您提供了Strings,那么您的程序仅需要使用一种编码,即将String转换回InputStream要返回的字节时。当然,如果这些“其他API”要将内容解释为文本数据,则需要知道使用哪种编码。     ,为了增加其他答案,已部署的应用程序将不再可在Windows和Linux之间移植,因为它们通常具有不同的默认编码。