有过嵌入式开发的朋友肯定不会陌生,在处理或向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}]
又打完一篇博客,哈哈