我有一个旧的C#程序,由于不同的原因被移植到Python 3。基本上,程序的作用是获取网站并搜索其内容(并处理它,但这并不是真正相关)。我从未真正遇到过实际的fetch-and-search例程的任何问题,但是一旦我将它移植到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")
但是,我想找出哪些代码最能模仿C#代码的unicode行为:
data = r.read().decode("utf_8", "replace")
或
data = r.read().decode("utf_8", "ignore")
任何有深入unicode经验的人都可以给我一些关于哪种方法更好的指示? Python手册确实描述了这种行为,但并不是因为我明白我应该使用哪种行为......
提前感谢您的帮助!
答案 0 :(得分:2)
根据http://msdn.microsoft.com/en-us/library/system.text.encoding.utf8.aspx,C#的默认UTF-8解码器会忽略无效字节。
用于解码unicode的Python'ignore'选项与此相同。