字符乱码问题的解析

有过嵌入式开发的朋友肯定不会陌生,在处理或向tft屏显示字符时就要用到字符编码,同样我们在处理java或者其他语言时也有同样的问题...

首先你的知道这么回事,byte与char的关系,byte通过编码格式可以得到char,char通过编码格式可以得到byte,所以编码格式错误就会导致char无法显示,说白了(两种编码不一样的情况下)

那么我们来分析一个经典的例子,我用(j2e)读取数据库的数据然后以json的方式传给安卓(处理不好就会乱码),我是这么写的

response.setCharacterEncoding("UTF-8");

response.getWriter().println(new String(new String(json.getBytes(), "GBK").getBytes("UTF-8"),"UTF-8"));

为啥这样写???

1.

new String(jsontest.getBytes(), "GBK")
之所这一步用gbk编码是因为我的myeclipse默认是gbk的方式显示的,从数据库里拉出来的数据是以gbk的方式存在我的.java文件里的,所以我通过new String()的方式构造出一个字符串char[],这时可以正常显示中文的,为什么可以正常显示中文呢?因为jsontest的byte是"gbk"的编码格式,然后我以"gbk"的编码格式得到正确的string(该string是gbk编码的)

2.

我们通过http传数据给安卓时,为了避免乱码,我们使用utf-8编码格式,所以

response.getWriter().println(new String(new String(json.getBytes(), "GBK").getBytes("UTF-8"),"UTF-8"));

3.

在次说明

new string(byte[],charset)

的byte的编码格式(即得到byte[]时所用的charset),要和charset保持一样才不会乱码,当让如果你的编码格式无法解析中文那么同样会乱码,如果你不懂,那么就使用utf-8吧

4.

安卓读取http时

//把流转化成字符流,并带缓冲
BufferedReader read = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(), Charset.forName("UTF-8")));
//一次性读完1m字符
char[] buffer = new char[1024];

有没有发现read后是char[]的,这里,所以这时用utf-8传数据给安卓是做好是utf-8

5.测试一下

--->>>200
[{"id":1,"theme_id":111,"theme_recommend_byadmin":0,"theme_user_id_fk":1,"theme_time":"2015-21-14 02:21:52","theme_type_fk":1,"theme_health_fk":1,"theme_recommend_tofriends":1,"theme_commentnum":44,"theme_praisenum":21,"theme_textcontent":"欢迎大家...","theme_readnum":12}]

又打完一篇博客,哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值