一千萬個為什麽

搜索

將Python字節解碼為unicode字符串的更好的錯誤處理方法是什麽?

我有一個舊的C#程序,由於不同的原因被移植到Python 3。基本上,程序所做的是獲取網站並搜索其內容(並處理它,但這並不是真正相關)。我從未真正遇到過實際的fetch-and-search例程的任何問題,但是一旦我將它移植到Python,它開始抱怨某些位置的無效unicode。

這不是一個真正的問題,因為實際的源網頁數據與舊的C#應用​​程序中的數據相同,舊程序使用損壞的數據實現了目標。但是,我想要的是Python 3 decode()方法的行為類似於C#中此類情況的內部處理。不幸的是,在閱讀Python手冊並查看'ign要麽e'和'replace'錯誤處理方法後,我真的不知道哪個更好地模仿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")

但是,我想找出哪些代碼最能模仿C#代碼的unicode行為:

data = r.read().decode("utf_8", "replace")

要麽

data = r.read().decode("utf_8", "ign要麽e")

Anyone with in-depth unicode experience which can give me some pointers on which method is better? The Python manual does describe the behavi要麽, but not so that I understand which I should use...

Thanks in advance f要麽 any help!

最佳答案

根據 http://msdn.microsoft.com/ en-us/library/system.text.encoding.utf8.aspx C#的默認UTF-8解碼器忽略無效字節。

用於解碼unicode的Python'ignore'選項與此相同。

轉載註明原文: 將Python字節解碼為unicode字符串的更好的錯誤處理方法是什麽?