posts - 241,  comments - 116,  trackbacks - 0
          昨天用java抓取html文件,獲取下來的html文件打開總是帶有亂碼,弄了半天搞定了。其實要避免亂碼的一個好方法:沒有必要去判斷頁面的編碼方式,只要讀取的數(shù)據(jù)按字節(jié)(而不是按字符)保存起來就可以了,后綴為html文件,然后用瀏覽器打開,肯定是正常的。
          分析的原因:在網(wǎng)絡(luò)上傳送的數(shù)據(jù)是基于字節(jié)流的,我們要在屏幕上顯示的時候要將字節(jié)流按某種字符集解碼成String的形式,在java中就是將字節(jié)流按某種格式解碼成Unicode,在將數(shù)據(jù)寫入文件的時候,又要將String按某種格式編碼成字節(jié)流,當兩次的編碼不一致的時候,就會造成亂碼。所以在抓取網(wǎng)頁進行保存的時候,可以直接將得到的字節(jié)流保存到文件中就可以了。
          字節(jié)流與字符流主要的區(qū)別是他們的的處理方式:
          字節(jié)流是最基本的,所有的InputStream和OutputStream的子類都是,主要用在處理二進制數(shù)據(jù),它是按字節(jié)來處理的。
          實際中很多的數(shù)據(jù)是文本,又提出了字符流的概念,它是按虛擬機的encode來處理,也就是要進行字符集的轉(zhuǎn)化。
          在實際開發(fā)中出現(xiàn)的亂碼問題實際上都是在字符流和字節(jié)流之間轉(zhuǎn)化不統(tǒng)一而造成的。
          注:URLConnection的連接、超時、關(guān)閉用法總結(jié)對于我們常用的GBK中,英文是占用1個字節(jié),中文是2個;
          對于UTF-8,英文是1個,中文是3個;
          對于Unicode,英文中文都是2個。
          下面一段代碼是用來抓取并保存到本地的java程序。
          import java.io.FileOutputStream;

          import java.io.IOException;

          import java.io.InputStream;

          import java.net.MalformedURLException;

          import java.net.URL;

           

          public class Test {

          public static void main(String[] argc) {

          URL url = null;

          FileOutputStream fos = null;

          InputStream is;

          try {

          for (int i = 0; i < 1; i++) {

          url = new URL("http://tomfish88.iteye.com/");

          byte bytes[] = new byte[1024 * 1000];

          int index = 0;

          is = url.openStream();

          int count = is.read(bytes, index, 1024 * 100);

          while (count != -1) {

          index += count;

          count = is.read(bytes, index, 1);

          }

          fos = new FileOutputStream("test.html");

          System.out.println(index);

          fos.write(bytes, 0, index);

          is.close();

          fos.close();

          }

          } catch (MalformedURLException e) {

          e.printStackTrace();

          } catch (IOException e) {

          e.printStackTrace();

          }

          }

          }
           
          posted on 2011-06-28 09:52 墻頭草 閱讀(1170) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          人人游戲網(wǎng) 軟件開發(fā)網(wǎng) 貨運專家
          主站蜘蛛池模板: 拜城县| 宜川县| 鞍山市| 衡阳县| 武清区| 祁门县| 扶沟县| 香格里拉县| 榆树市| 博乐市| 彰化县| 大渡口区| 台南市| 基隆市| 道孚县| 湖北省| 司法| 水城县| 浦东新区| 怀来县| 江津市| 高碑店市| 鹤峰县| 元氏县| 如皋市| 县级市| 沁源县| 宿州市| 沅陵县| 古浪县| 呼伦贝尔市| 綦江县| 西贡区| 永年县| 鄂托克旗| 濉溪县| 包头市| 呼图壁县| 城固县| 兴仁县| 思茅市|