首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

数据库读取乱码有关问题

2012-12-16 
数据库读取乱码问题不晓得各位遇到下面的情况如何处理,请看红框里输出的部分已知编码格式,但是输出到控制

数据库读取乱码问题
不晓得各位遇到下面的情况如何处理,请看红框里输出的部分

已知编码格式,但是输出到控制台和展示到界面上的都是那种乱码,看上去好像是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值去做判断

热点排行
Bad Request.