JAVA从字节流到字符输出(解决中文乱码) 博客分类: java 中文乱码提取网页源码字节流字符流
程序员文章站
2024-03-25 14:57:22
...
java从文件,控制台,网页提取数据都是以字节流形式输入,由于编码方式不同,有时候会出现中文乱码;javaJDK中有一些类可以很好的解决中文乱码问题;
1)建立一个InputStream对象存储输入的字节流;
2)用InputStreamReader类对字节流按照想要的编码格式重新编写成字符流(默认是GBK编码);
3)用BufferedReader建立一个数据缓存区,存储一个一个的字符,方便进行处理;
到这里使用BufferedReader的readLine()函数就可以逐行提取出Reader里面的数据;
(要是想要提取整个缓存区里的数据,不妨用StringBuffer类型;StringBuffer是一个可变长的字符串,会自动扩容,而String对象是不可变长的,生成时有多大就是多大,StringBuild虽然也是可变长的,但它其中一些函数加了锁机制,性能略输于StringBuffer)
以下是通过一个URL提取网页源码的程序:
1)建立一个InputStream对象存储输入的字节流;
2)用InputStreamReader类对字节流按照想要的编码格式重新编写成字符流(默认是GBK编码);
3)用BufferedReader建立一个数据缓存区,存储一个一个的字符,方便进行处理;
到这里使用BufferedReader的readLine()函数就可以逐行提取出Reader里面的数据;
(要是想要提取整个缓存区里的数据,不妨用StringBuffer类型;StringBuffer是一个可变长的字符串,会自动扩容,而String对象是不可变长的,生成时有多大就是多大,StringBuild虽然也是可变长的,但它其中一些函数加了锁机制,性能略输于StringBuffer)
以下是通过一个URL提取网页源码的程序:
package url; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; public class url_print { String strUrl="http://www.baidu.com"; public void print() { URL url=null; try { url = new URL(strUrl); URLConnection connection = url.openConnection(); // 获取字节流; InputStream is = connection.getInputStream(); //将字节流转为字符流并建立读缓存区 BufferedReader r = new BufferedReader(new InputStreamReader(is,"UTF-8")); String temp; //StringBuilder可变长的字符串类; StringBuilder html=new StringBuilder(100); while((temp=r.readLine())!=null) { html.append(temp+"\n"); } System.out.println(html.toString()); } catch (IOException e) { return; } } public static void main(String argv[]) { url_print test=new url_print(); test.print(); } }