本帖最后由 AA5279AA 于 2013-09-03 11:49:09 编辑

解决方案 »

  1.   

    第一次:is.read(b)
    第二次:is.read()这个应该是根源,个人感觉第一次正好读到了半个中文字,而第二次是逐个字节读
      

  2.   

    BufferedInputStream bis = new BufferedInputStream(is, "UTF-8");
    加上这个试试
      

  3.   

    用InputStreamReader吧,使用InputStream读取2048位有很大可能末字未读取到完整的编码,从而使用其构造字符串时导致错误编码.
    文字读取可以使用InputStreamReader(inputStream, "UTF-8")来操作
      

  4.   

    同意一楼,
    读取“微”时打印的byte数组值,转为utf-8编码时,解析失败,出现乱码。
    要么换一个编码如GBK,要么就用第二个方法。inputstream 转byte数组时,用的是什么编码格式,求解?
      

  5.   

    这样读一定是会出错的额!在每次2048个字节读完以后你不能保证这些字节就是刚刚好几个中文字符可能把后面一个中文字符给拆开来了,这样在用new String(b, 0, n, "UTF-8")转成string就会出现乱码了。后面一个是把所有的字节都读完了在同一装换就不会出现字符被拆的现象