2015年4月4日 星期六

提取中文網頁亂碼之終極解決方案--使用自訂函數轉換編碼

前篇[IMPORTHTML提取中文網頁資料之亂碼解決方式]之自訂函數有個缺陷,當過度使用時,會出現 "Script invoked too many times per second for this Google user account" 的錯誤訊息(詳見官方網站),要經過一段時間等限制解除後,自訂函數方能正常運作。

經參考說明,採用陣列整批轉換編碼大量降低自訂函數的運用頻率可避免上述問題發生,所以針對原先的自訂函數 encode_big5(s) 作部分修正

function encode_big5( s ){
  //使用mathod map屬性時,初次編譯會出現 "TypeError: 無法讀取 undefined 的「map」屬      性",為正常現象,無需理會
  if (s.map) {            // 測試資料是否為陣列型態,假如是陣列型態就改為陣列輸出
    return s.map(encode_big5);
  } else{
    return Utilities.newBlob("").setDataFromString(s, "ISO-8859-1").getDataAsString("big5") ;
  }
}

若上述轉換編碼無法正確轉換為繁體中文,請比照上述方式修正自訂函數 encode_utf8(s)


部分網站會大量使用空白、換行的字符,這類網站如果直接使用 encode_big5()直接轉換編碼會將這些字符誤認為轉換"文字"的一部分,在轉碼的過程會取到錯誤的字節,造成轉碼後仍然會夾雜部分亂碼,無法完全正確轉換,須善用REGEXREPLACE()、SUBSTITUTE()這類函數先取代這些字符後,再運用 encode_big5(s)來轉換編碼。

1 則留言:

  1. 請問有辨法用importhtml來提取這個網站資料嗎?或者有其他方法?感謝!
    http://www.goodinfo.tw/StockInfo/StockDetail.asp?STOCK_ID=2330

    回覆刪除