我有一箇舊的C#程序因爲不同的原因被移植到Python 3。基本上,該程序的功能是獲取網站並搜索其內容(並對其進行處理,但這並不相關)。我從來沒有真正的實際抓取和搜索例程有任何問題,但一旦我將它移植到Python它開始抱怨在某些位置的無效unicode。將Python字節解碼爲unicode字符串的更好的錯誤處理方法是什麼?
這實際上並不是一個問題,因爲實際的源網頁數據與舊的C#應用程序中的數據相同,並且舊程序使用損壞的數據實現了其目標。但是,我想要的是Python 3 decode()方法的行爲與C#中這種情況的內部處理類似。不幸的是,在閱讀Python手冊並查看「忽略」和「替換」錯誤處理方法後,我並沒有得到哪種方法更好地模擬C#行爲(我也未能識別)。要添加一些代碼加入討論,這裏是處理一切透明的C#代碼:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
response = (HttpWebResponse)request.GetResponse();
reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string html = reader.ReadToEnd();
對應的Python 3代碼如下:
req = Request(url)
r = urlopen(req)
data = r.read().decode("utf_8")
不過,我想找出其中的以下代碼將最好m IMIC C#代碼的Unicode行爲:
data = r.read().decode("utf_8", "replace")
或
data = r.read().decode("utf_8", "ignore")
與深入unicode的經驗,可以給我一些指點哪種方法比較好,有人嗎? Python手冊確實描述了這種行爲,但並不能讓我明白我應該使用哪一種...
在此先感謝您的幫助!
那麼,你的C#代碼的行爲是什麼?當它不知道如何解碼輸入字符時它做了什麼? – 2010-04-08 16:02:14