android sqlite3 中文乱码问题,恳求~
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android sqlite3 中文乱码问题,恳求~相关的知识,希望对你有一定的参考价值。
我在android中,用sqlite3存储了中文,但是数据库里展示是乱码,在android里取出来也是乱码,求解救~
建表语句:
sql="Create table IF NOT EXISTS question_tb(" +
"code int," +
"is_finished int," +
"is_english int,"+
"pic_name varchar(64)," +
"ans_back BLOB," +
"ans_true varchar(64)," +
"info int"+
")";
ans_back 和pic_name是需要存储中文的,两种自动类型都试过,不行
插入是这样插入的
db.execSQL("insert into question_tb values(?,?,?,?,?,?,?)",value);
读取是这样读的
android.util.Log.d("tag", String.valueOf(i)+":"+cursor.getString(cursor.getColumnIndex("ans_back")));
也试过这种
byte[] val = cursor.getBlob(cursor.getColumnIndex("ans_back"));
String sn;
try
sn = new String(val,"gb2312");
android.util.Log.d("tag",sn);
catch (UnsupportedEncodingException e)
// TODO Auto-generated catch block
e.printStackTrace();
但是结果都是乱码,求解救啊
貌似还是不行哦,例如中文是:“小明小黄小李小陈”
插入做了转换
for(int i=0;i<value.length;i++)
insertvalue[i]=new String(value[i].getBytes(),"UTF-8");
db.execSQL("insert into question_tb values(?,?,?,?,?,?,?)",insertvalue);
读取的时候,转换和不转换展示的都是乱码
1.这样是“С��С��С��С��”
android.util.Log.d("tag",cursor.getString(cursor.getColumnIndex("ans_back")));
2.这样是:С��С��С��С����
try sn = new String(val,"UTF-8");
android.util.Log.d("tag",sn);
楼主,插入字符的编码和读出时用的编码要一致,就是说:
假设,数据库中数据是你通过android代码插入,以GB2312编码格式,如:
db.execSQL("insert into question_tb values(?,?,?,?,?,?,?)",new String(val,"gb2312"));插入到表:
"Create table IF NOT EXISTS question_tb(" +"code int," +
"is_finished int," +
"is_english int,"+
"pic_name varchar(64)," +
"ans_back BLOB," +
"ans_true varchar(64)," +
"info int"+
")";
读出就是:
byte[] val = cursor.getBlob(cursor.getColumnIndex("ans_back"));String sn;
try
sn = new String(val,"gb2312");
catch (UnsupportedEncodingException e)
e.printStackTrace();
就是说,插入和读取要么都做转换,要么都不做(android默认UTF-8格式)。
追问那么,意思是,如果我插入时,用utr8插入,读出来就不用转换了?
追答en
追问不好意思,貌似还是不行,我把修改后的代码贴到问题补充里了,追问限制字数,5555
追答不是这样的,android默认就是UTF-8,你把ans_back字段类型设为text,读写不用new String("中文","UTF-8"),直接默认的new String();
追问意思是
建表语句 字段改为TEXT
写进去的时候不需要转,直接插就可了?
读出来的时候要转?
还是怎样呢?
我现在改成TEXT,写进去转了UTF8,读出来转不转都是乱码
反过来,改成TEXT,写进去什么的不做,读出来转不转也都是乱码
搞不懂啊,55555555555,大侠能不能详细指导一下,或者写几句核心代码看看
追答改成TEXT,直接以new String()对象写进去,不转,读出来用getString();,也不转.
如果还有问题,是因为之前写的数据导致的(转码过),把之前写的数据全删掉..
总之,android 数据库读写 默认就是用UTF-8编码,UTF-8本身就支持中文,不要画蛇添足。
这个表可以放置记录为zh_CN,再看看你的是否有乱码;
以上是关于android sqlite3 中文乱码问题,恳求~的主要内容,如果未能解决你的问题,请参考以下文章