对java里面的字符编码的进一步了解

来源:互联网 发布:dis mac-add 编辑:程序博客网 时间:2024/05/01 05:27

最近,帮一位友人维护网站时碰到了一些关于字符编码转换的问题,几经周折终于搞定了,虽说不上什么拨开云雾见月明,但一些收获总是有的。大概的情况是,我要在其他的网站上截取网页信息,并将其放在我的网页上显示,后来由于目标网站上网页的编码改变了,就导致了我的页面显示的一大堆乱码了。

经过一些分析,得到问题的产生过程:
1。在目标网站上的字符编码由原来的GBK改为unicode了。
2。在我网站上的代码把改变后的unicode字符当成GBK来读取,即读取后生成的String是把

unicode字符当成GBK来转换成unicode。
这样的转换自然会导致乱码了。

解决的过程:
解决的方法有两个,我首先想到的一个是在底层自己用String的方法进行转换,不过这个方法原理上可行,但是实际上由于java底层代码的问题使得转换回来的编码会出现问题。后来看到了网络连接数据流类的构造函数可选择字符集,才知道可以直接让程序把远程网站的unicode字符正确读取了,具体的代码如下:
InputStreamReader read = new InputStreamReader(conn.getInputStream(),"UTF-8");
原来问题是这么的简单啊~~~


后记:
虽然前面用String的方法不行,不过它的原理倒是值得参考:String里 getBytes("GBK");  是把String里面所保存的unicode字符转换为GBK的一组byte串。而String的构造方法 String(bytes,"GBK");  是把bytes里面存储的GBK字符转换为新String对象里面的unicode字符。

原创粉丝点击