在處理一些爬下來的網頁時,經常發現會存在
�
這個字元。嘗試各種轉編碼,無果。
比如:
每個人對工� �的使用往往各有偏好
對應的原文是這個:
每個人對工具的使用往往各有偏好
如何處理這樣的情況,這又是由於什麼問題產生的呢?
如果需要資料,貌似這個可以看看
http://apps.timwhitlock.info/unicode/inspect?s=%EF%BF%BD
回複內容:
在處理一些爬下來的網頁時,經常發現會存在�
這個字元。嘗試各種轉編碼,無果。
比如:
每個人對工� �的使用往往各有偏好
對應的原文是這個:
每個人對工具的使用往往各有偏好
如何處理這樣的情況,這又是由於什麼問題產生的呢?
如果需要資料,貌似這個可以看看
http://apps.timwhitlock.info/unicode/inspect?s=%EF%BF%BD
從某編碼向Unicode編碼轉化時,如果沒有對應的字元,得到的將是Unicode的代碼“\uffffd”,也就是�
這個字元。
這個是你的爬蟲根本不識別原網頁的編碼格式(ASCII或者GB2312等)和壓縮格式(Gzip等),全都無腦轉成UTF-8字串導致的,出現這個字元說明轉換失敗,資料已經丟失了,這個字元本身並沒什麼實際意義。
如果是PHP的話,這個可能是因為substring導致的。解決辦法是安裝mb_string模組,使用mb_*系列函數。
有時候一個漢字被截掉一部分會產生這個符號,比如一個兩位元組的漢子被截掉了一位元組,怎麼處理我也不知道。。。
你這個應該是‘具’字被分成兩部分了。。
public static function utf8Substr($str, $from, $len){ return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'. '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s', '$1',$str);}
這個問題我估計是因為這段文字在換行的時候被截斷了,你扒文字的時候注意看看分行符號有沒有把一個文字分成兩半
可能它就是亂碼
你可以用瀏覽器正常訪問一下試試