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本身就支持中文,不要画蛇添足。

参考技术A sqlite的DB操作,有个表android_metadata,它包含一个字段locale,类型text,
这个表可以放置记录为zh_CN,再看看你的是否有乱码;

以上是关于android sqlite3 中文乱码问题,恳求~的主要内容,如果未能解决你的问题,请参考以下文章

svn 更新文件冲突,提示中文乱码解决

怎么解决svn清理失败且路径显示乱码问题

怎么解决svn清理失败且路径显示乱码问题

sqlite乱码

恳求pstools的用法(中文说明)?

Android TV 中缺少 sqlite3?