当前位置: 代码迷 >> Android >> 数据库读取乱码有关问题
  详细解决方案

数据库读取乱码有关问题

热度:82   发布时间:2016-05-01 12:36:08.0
数据库读取乱码问题
不晓得各位遇到下面的情况如何处理,请看红框里输出的部分

已知编码格式,但是输出到控制台和展示到界面上的都是那种乱码,看上去好像是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");
  相关解决方案