看板 Python 關於我們 聯絡資訊
※ 引述《left ()》之銘言: : 各位大大 幫忙一下了 : 目前一直卡在這個檔沒法子讀 : http://www.cmlab.csie.ntu.edu.tw/~left/index813.html : with open('index813.html','r') as page: : for each_line in page: : print(each_line.strip()) : 出現下面error 一直處理不掉 : UnicodeDecodeError: 'cp950' codec can't decode bytes in position 1256-1257: illegal multibyte sequence : args = ('cp950', b'50"> 6/19</td>\n<td width="120">toughroleX</td...</div>\n</div>\n</div>\n</div>\n</body>\n</html>', 1256, 1258, 'illegal multibyte sequence') : encoding = 'cp950' : end = 1258 : object = b'50"> 6/19</td>\n<td width="120">toughroleX</td...</div>\n</div>\n</div>\n</div>\n</body>\n</html>' : reason = 'illegal multibyte sequence' : start = 1256 : with_traceback = <built-in method with_traceback of UnicodeDecodeError object> 簡單來說,是因為底下這行字無法用 cp950 decode "[問題] 一般劵商研究員和富邦ARM的抉擇?" 就是 "般" 跟 "商" 中間那個看似空白的東西出問題 如果你只是想把可解碼的部分印出來,那很簡單 用 binary mode 讀檔,不要用 text mode 然後自己 decode binary data,把無法解碼的部分處理掉,像是 ignore python3 code 如下: with open('index813.htm', 'rb') as f: binary_data = f.read() data = binary_data.decode('cp950', 'ignore') lines = data.splitlines() for line in lines: print(line) 如果你是想分析網頁,那就看你要怎麼處理了 ignore 是一種方法,但是會損失資訊 猜編碼是一種方法,有現成 module 可用,不過準確率不是 100% 存 binary data 是一種方法,保證不會損失資訊 不過以後絕對會遇到相同問題,要自己知道怎麼解決 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.46.112.229
os653:確定要 ignore 的話,直接開 text mode 也可以 12/03 13:16
os653:with open('c:\\1.htm', 'r', errors='ignore') as f: 12/03 13:16
left:太感謝了 已經解決了 12/03 16:40
plover:or try big5-hkscs gb18030 12/05 19:10