将Python字节解码为unicode字符串的更好的错误处理方法是什么?

将Python字节解码为unicode字符串的更好的错误处理方法是什么?,python,unicode,Python,Unicode,我有一个旧的C#程序,出于不同的原因被移植到Python3。基本上,程序所做的是获取网站并搜索其内容(并对其进行处理,但这并不真正相关)。我在实际的获取和搜索例程中从来没有遇到过任何问题,但一旦我将其移植到Python中,它就开始抱怨某些位置的unicode无效 这并不是一个真正的问题,因为实际的源网页数据与旧的C#应用程序中的数据相同,并且旧的程序使用损坏的数据实现了其目标。但是,我希望Python3 decode()方法的行为类似于C#中对此类情况的内部处理。不幸的是,在阅读了Python手

我有一个旧的C#程序,出于不同的原因被移植到Python3。基本上,程序所做的是获取网站并搜索其内容(并对其进行处理,但这并不真正相关)。我在实际的获取和搜索例程中从来没有遇到过任何问题,但一旦我将其移植到Python中,它就开始抱怨某些位置的unicode无效

这并不是一个真正的问题,因为实际的源网页数据与旧的C#应用程序中的数据相同,并且旧的程序使用损坏的数据实现了其目标。但是,我希望Python3 decode()方法的行为类似于C#中对此类情况的内部处理。不幸的是,在阅读了Python手册并研究了“ignore”和“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行为:

任何有深入unicode经验的人都可以给我一些关于哪种方法更好的建议吗?Python手册确实描述了这种行为,但不是为了让我理解应该使用哪种方法

提前感谢您的帮助!

根据C#的默认UTF-8解码器,忽略无效字节


Python解码unicode的“忽略”选项与此相同。

那么,您的C代码的行为是什么?当它不知道如何解码输入字符时,它会做什么?
data = r.read().decode("utf_8", "replace")
data = r.read().decode("utf_8", "ignore")