2010-04-08 58 views
0

我有一箇舊的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手冊確實描述了這種行爲,但並不能讓我明白我應該使用哪一種...

在此先感謝您的幫助!

+0

那麼,你的C#代碼的行爲是什麼?當它不知道如何解碼輸入字符時它做了什麼? – 2010-04-08 16:02:14

回答

相關問題