1

在解析 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 返回根据后者转义的正确字符串表示形式。

为什么会这样?有什么办法可以改变这种行为?

4

0 回答 0