You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ISO_8859_1转UTF-8两种方式差异:为何第一种转换不符合预期?

问题原因解析

第一种方式失效的核心是两次编码/解码过程中出现了不可逆的字节损坏,具体拆解如下:

  • 当你用new BufferedReader(new InputStreamReader(inputStream))时,InputStreamReader会使用当前系统的默认字符集(比如Windows的GBK、Linux/macOS的UTF-8)解码输入流字节。如果输入流实际是ISO-8859-1编码,默认字符集无法识别部分字节(比如ISO-8859-1的0x80-0xFF范围字节),会把这些字节替换成�(Unicode替换字符U+FFFD)。
  • 后续调用readLine().getBytes(StandardCharsets.ISO_8859_1)时,�会被转换成ISO-8859-1对应的字节0x3F(问号),这一步直接丢失了原始字节的信息。
  • 最后再转成UTF-8时,得到的只能是问号或乱码,完全无法还原原始正确字符。

而第二种方式直接用ISO-8859-1作为InputStreamReader的解码字符集,每个字节都会被精准映射到对应的ISO-8859-1字符,没有中间替换的损耗,所以能正常识别。


内容的提问来源于stack exchange,提问作者pawel asdasdad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 21:52:01