数据库读取乱码问题不晓得各位遇到下面的情况如何处理,请看红框里输出的部分已知编码格式,但是输出到控制
数据库读取乱码问题 不晓得各位遇到下面的情况如何处理,请看红框里输出的部分 已知编码格式,但是输出到控制台和展示到界面上的都是那种乱码,看上去好像是ascii码[最优解释]
引用: 引用:用的是sqlite么? 你试试在cmd下查询一下数据库,看看是否是乱码 在我的机器上此类输出需要以 iso8859-1 获取byte[] 数组,然后重新封装成string就是正常的,但是在另外一部机器(GT-N7100)上则不需要转码即可正常显示 还真没遇到过,我用数据库的时候一般都是直接拿出来,然后setText,没遇到过乱码情况,那你可以把所有提取的数据都经过byte[]数组转码,然后再输出吧。虽然性能上不好,但也是解决办法之一啊。
会不会是字符集的问题呢?之前做音标的时候,也出现过乱码问题,下个字符集放在assets/font里
然后通过设置Typeface,也可以正常显示了。
[其他解释] 既然你知道是彩信里数据,为什么不看看彩信里是怎么解码的呢? 印象彩信的主题在多数情况在数据库中都是乱码,一定要结合对应的编码方式才可以,也就是你提到的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(); //真实的文本
试试看能不能解决你的问题。
[其他解释] 补充一下,那些乱码原本的内容是汉字或者汉字与英文的混合字符串
[其他解释] 用的是sqlite么? 你试试在cmd下查询一下数据库,看看是否是乱码
[其他解释] LOGCAT默认是不能显示中文的
[其他解释] 引用: 用的是sqlite么? 你试试在cmd下查询一下数据库,看看是否是乱码 在我的机器上此类输出需要以 iso8859-1 获取byte[] 数组,然后重新封装成string就是正常的,但是在另外一部机器(GT-N7100)上则不需要转码即可正常显示
[其他解释] 引用: LOGCAT默认是不能显示中文的 请仔细看我的问题描述,显示到手机界面上的也是那样的,而且logcat支持中文输出已经有一段时间了
[其他解释] 引用: 用的是sqlite么? 你试试在cmd下查询一下数据库,看看是否是乱码 数据库中的就是控制台输出的那种乱码
[其他解释] 引用: 引用:用的是sqlite么? 你试试在cmd下查询一下数据库,看看是否是乱码 数据库中的就是控制台输出的那种乱码 那应该是存储的时候出现的问题吧?
[其他解释] 引用: 引用:引用:用的是sqlite么? 你试试在cmd下查询一下数据库,看看是否是乱码 在我的机器上此类输出需要以 iso8859-1 获取byte[] 数组,然后重新封装成string就是正常的,但是在另外一部机器(GT-N7100)上则不需要转码即可正常显示 还真没遇到过,我用数据库的时候一般都是直接…… 多谢提醒。这个乱码数据是短信数据库中的彩信标题,我看过在某些机器上的数据库中时正常中文,有些则是像1楼图中的那些乱码,但是数据库中彩信标题的编码格式那列都是106,也就是utf8.关于你说的全部转换成byte[]流,那在获取byte流的时候是否需要指定编码格式呢?
[其他解释] 引用: 引用:引用:用的是sqlite么? 你试试在cmd下查询一下数据库,看看是否是乱码 数据库中的就是控制台输出的那种乱码 那应该是存储的时候出现的问题吧? 存储是系统的短信应用控制的,我的程序无法控制。
我之前用的方法如下,不知有何问题:
String newStr = new String(oldStr.getByte("iso-8859-1"), "UTF-8");
这种方式在数据库中的数据为1楼中的乱码时可以正常转码。但如果数据库中时正常汉字字符的话就会变成1楼看到的乱码。但是通过各种编码格式工具的判断,两种情况都是UTF-8,没办法做差异判断[其他解释]
引用: 引用:引用:引用:用的是sqlite么? 你试试在cmd下查询一下数据库,看看是否是乱码 数据库中的就是控制台输出的那种乱码 那应该是存储的时候出现的问题吧? 存储是系统的短信应用控制的,我的程序无法控制。 我之前用的方法如下,不知有何问题: String ne…… 这个我还真不知道该怎么办了,毕竟没遇到过,看看有没有高人能来帮你解决。。- - 超出我的能力范围了。
[其他解释] 引用: 引用:引用:引用:引用:用的是sqlite么? 你试试在cmd下查询一下数据库,看看是否是乱码 数据库中的就是控制台输出的那种乱码 那应该是存储的时候出现的问题吧? 存储是系统的短信应用控制的,我的程序无法控制。 我之前用的…… 同样感谢你耐心的回复
[其他解释] 引用: 引用:引用:引用:引用:引用:用的是sqlite么? 你试试在cmd下查询一下数据库,看看是否是乱码 数据库中的就是控制台输出的那种乱码 那应该是存储的时候出现的问题吧? 存储是系统的短信应用控…… 客气了
[其他解释] 看来高手们都比较忙啊,自己寻办法去了
[其他解释] 引用: 既然你知道是彩信里数据,为什么不看看彩信里是怎么解码的呢? 印象彩信的主题在多数情况在数据库中都是乱码,一定要结合对应的编码方式才可以,也就是你提到的106 UTF-8 0x6A 这个值在这里定义着 CharacterSets.java (frameworks\frameworks\base\core\java\com\google\android\mms\pdu…… 这个周一就试过了,不行。
[其他解释] 分还是散了,求个人品,最近做了个小手术,希望早日康复
[其他解释] 问题已解决。但不有一点不太明白的是,在我看到已知的各种系统以及各种android手机的短信数据库中,关于彩信标题的编码格式(subcs)均为106,也就是UTF-8,但是对标题的存储则有的是正常汉字字符,有的则是一楼中所看到的那种乱码。
解决方式如下:
boolean isISO = java.nio.charset.Charset.forName(ENCODE_ISO88591).newEncoder().canEncode(sub);
这个API以前几乎没用过,所以不知道,还是在网上查的,判断一下sub字符串是否能够使用给定的编码格式编码,然后用得到的boolean值去做判断