在解析IRI时,我正在努力解决.net中的Uri类问题。
考虑这个IRI:
var iriStr = "http://example.com/base/植物/名=しそ;使用部=葉";
当我从中创建和Uri(无论iri解析设置)时,我得到以下内容:
var uri = new Uri(iriStr);
Assert.AreEqual(iriStr, uri.ToString()); // this works
Assert.AreEqual(iriStr, uri.AbsoluteUri); // this fails
uri.AbsolutUri返回的实际值是:
http://example.com/base/%E6%A4%8D%E7%89%A9%2F%E5%90%8D%3D%E3%81%97%E3%81%9D%3B%E4%BD%BF%E7%94%A8%E9%83%A8%3D%E8%91%89
似乎Uri类的工作方式与RFC3986中描述的不同,而不是RFC3987规范(尽管msdn说的是其他内容)。我需要Uri#AbsoluteUri根据后者返回正确的字符串prepresentation。
为什么会这样?有什么方法可以改变这种行为吗?