Linux - iconv 使用 - 處理 curl 亂碼問題


1. 概述

  1. 好久沒有寫博客了, 最近看了些東西, 但是不知道怎么輸出
  2. 簡單寫點東西吧

2. 場景

  1. 最近發現一個網站, 時不時會更新電子書, 書還很好
  2. 網站有一個 排行榜, 會把近期更新的電子書, 都列出來
  3. 我之前的思路, 是隔兩天掃一輪
  4. 現在網站轉變了思路
    1. 更新應該是每天來的
    2. 但是排行榜並不每天更新
    3. 排行榜最開始有 100 個內容, 現在只有 20 個
  5. 結果
    1. 不定期更新, 導致每次更新內容可能會很多
    2. 如果多於 20 個, 可能會導致我丟內容
  6. 我的目的
    1. 能夠不漏地獲取到網站更新的電子書

3. 思路

  1. 電子書的更新 url, 是有規律的, 里面的變量, 是一個 int
    1. 這個可以通過 循環 來幫助生成
  2. 因為不熟悉 爬蟲, 所以只有使用 shell 來做
    1. curl 是個選擇
  3. 獲取的頁面內容, 可以通過 grep 來過濾標題, 查看到底是什么書

4. 環境

  1. 操作系統
    1. windows 10
  2. shell
    1. git bash
  3. 建議
    1. 有條件最好用 linux

5. 問題

  1. 概述

    1. 執行中遇到了些小問題
  2. 思路

    1. 思路是先做單體, 再做循環
      1. 先使用 curl 來做
      2. 然后用 grep
      3. 最后 循環, 輸出到文本文件
  3. 問題

    1. curl 亂碼

      1. curl 下來的東西, 中文部分是亂碼
    2. 嘗試解決

      1. 調整 git bash 的編碼

        1. 想法
          1. 可能是 curl 的結果, 和 git bash 的編碼不一致
          2. 嘗試調整成 gb2312 看看
        2. 結果
          1. curl 的東西可以看了
          2. 但是 文件系統 里, 之前正常顯示的內容亂碼了
        3. 結論
          1. curl 內容是 gb2312 的編碼
          2. 本地文件系統, 是 utf8 的編碼
          3. 兩種編碼不一致, 所以亂碼了
          4. 這種調整 gitbash charset 的思路, 不可用
      2. 改變 curl 內容的編碼

        1. 想法

          1. 不是 git bash 亂碼
          2. 是 curl 內容亂碼
          3. 如何改變 curl 結果的編碼
        2. 確認編碼

          1. 思路
            1. 是的, 之前的編碼是猜的
            2. 但是, 編碼是可以確認的
            3. 正確的思路, 是應該先確認
            4. shell 代碼
              > curl <url> | grep -E 'charset'
              <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
              
        3. 轉換

          1. 使用 iconv 工具
            1. 概述

              1. 一個轉碼的工具
              2. 簡單使用, 不做詳細介紹了
            2. 使用

              1. 命令

                # 1. 查看支持字符集
                > iconv -l
                # 2. 轉換字符集
                ## 1. 默認輸出到屏幕
                ## 2. -t 默認好像是 utf8
                > iconv -f <fromEncode> -t <toEncode> <file>
                # 3. 支持管道
                > curl <url> | iconv -f gb2312 
                

5. 后續

  1. 后續就是過濾內容, 生成列表
    1. 這塊也不難, 我就不講了

6. 問題

  1. 思路的本質
    1. 感覺本質上, 這是個爬蟲
    2. 如果會 爬蟲, 工作會不會輕松很多
  2. 安全機制
    1. 我如果每天掃那個網站, 會不會觸發安全機制
  3. curl 和 grep
    1. 好久不用, 感覺有點生疏
  4. 我過濾的內容, 最后都是帶 html 標簽的
    1. 據說這些工具, 可以去掉標簽
      1. grep
      2. sed
      3. 只有下來研究了

7. ref

  1. https://blog.csdn.net/wangjun5159/article/details/79289044

  2. 一個問題

    1. 問題: 在 git for windows 下, 使用 java 會有奇怪的問題
      1. 環境

        1. windows
        2. java
          1. 輸出編碼是 gbk
        3. git for windows
          1. 輸出編碼是 utf-8
      2. 操作

        1. 輸入命令 java -h 有 亂碼
        2. 將 git 的編碼調整為 gbk, 輸出 命令輸出 沒有亂碼
        3. 將 git 的編碼調整為 utf-8, 使用 java -h|iconv -f gbk 依然亂碼
      3. 疑問

        1. 為什么 iconv 可以處理 curl 傳來的信息, 卻處理不了 java 的
        2. 是因為兩者 輸出的結果, 本身就不是同一類東西嗎
        3. 知道的高手走過路過, 麻煩留個言


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM