不晓得各位遇到下面的情况如何处理,请看红框里输出的部分已知编码格式,但是输出到控制台和展示到界面上的都是那种乱码,看上去好像是ascii码

解决方案 »

  1.   

    用的是sqlite么? 你试试在cmd下查询一下数据库,看看是否是乱码
      

  2.   

    在我的机器上此类输出需要以 iso8859-1 获取byte[] 数组,然后重新封装成string就是正常的,但是在另外一部机器(GT-N7100)上则不需要转码即可正常显示
      

  3.   

    请仔细看我的问题描述,显示到手机界面上的也是那样的,而且logcat支持中文输出已经有一段时间了
      

  4.   

    还真没遇到过,我用数据库的时候一般都是直接拿出来,然后setText,没遇到过乱码情况,那你可以把所有提取的数据都经过byte[]数组转码,然后再输出吧。虽然性能上不好,但也是解决办法之一啊。会不会是字符集的问题呢?之前做音标的时候,也出现过乱码问题,下个字符集放在assets/font里
    然后通过设置Typeface,也可以正常显示了。
      

  5.   

    多谢提醒。这个乱码数据是短信数据库中的彩信标题,我看过在某些机器上的数据库中时正常中文,有些则是像1楼图中的那些乱码,但是数据库中彩信标题的编码格式那列都是106,也就是utf8.关于你说的全部转换成byte[]流,那在获取byte流的时候是否需要指定编码格式呢?
      

  6.   

    存储是系统的短信应用控制的,我的程序无法控制。
    我之前用的方法如下,不知有何问题:
    String newStr = new String(oldStr.getByte("iso-8859-1"), "UTF-8");
    这种方式在数据库中的数据为1楼中的乱码时可以正常转码。但如果数据库中时正常汉字字符的话就会变成1楼看到的乱码。但是通过各种编码格式工具的判断,两种情况都是UTF-8,没办法做差异判断
      

  7.   

    既然你知道是彩信里数据,为什么不看看彩信里是怎么解码的呢? 印象彩信的主题在多数情况在数据库中都是乱码,一定要结合对应的编码方式才可以,也就是你提到的106  UTF-8  0x6A 这个值在这里定义着
     CharacterSets.java (frameworks\frameworks\base\core\java\com\google\android\mms\pdu)
    这是彩信里显示主题时用的方法,在MesageItem.java这个类里
    EncodedStringValue v = new EncodedStringValue(
                            cursor.getInt(columnsMap.mColumnMmsSubjectCharset),//字符格式
                            PduPersister.getBytes(subject));//数据库里的乱码文本
                    mSubject = v.getString();//真实的文本
    试试看能不能解决你的问题。
      

  8.   

    问题已解决。但不有一点不太明白的是,在我看到已知的各种系统以及各种android手机的短信数据库中,关于彩信标题的编码格式(subcs)均为106,也就是UTF-8,但是对标题的存储则有的是正常汉字字符,有的则是一楼中所看到的那种乱码。
    解决方式如下:
    boolean isISO = java.nio.charset.Charset.forName(ENCODE_ISO88591).newEncoder().canEncode(sub);
    这个API以前几乎没用过,所以不知道,还是在网上查的,判断一下sub字符串是否能够使用给定的编码格式编码,然后用得到的boolean值去做判断