Paths with Unicode/UTF-8 incorrectly parsed/reported by System.Uri
General
As described by the title, paths with Unicode/UTF-8 characters are incorrectly parsed/reported by System.Uri resulting in an invalid path. For example the path "/üri" will result in an Uri like "file:///%C3%BCri/üri" (note the unescaped /üri at the end).
This also happens with other Unicode/UTF-8 characters like £, §, etc. So you can replace ü by any other Unicode/UTF-8 character in my example and see the same result, e.g. the path is doubled.
Expected Result
PathAndQuery = AbsolutePath = "/%C3%BCri"
AbsoluteUri = "file:///%C3%BCri"
Results collected using mono 5.14 on the same Linux machine.
Actual Result
PathAndQuery = AbsolutePath = "/%C3%BCri" // This seems to be correct
AbsoluteUri = "/%C3%BCri/%C3%BCri" // Note the additional "/%C3%BCri" at the end
_string = "/üri/üri" // Note the additinal "/üri" at the end
Using the .NET core version mentioned below.
System Informations
$ dotnet --info
.NET Core SDK (reflecting any global.json):
Version: 2.1.302
Commit: 9048955601
Runtime Environment:
OS Name: gentoo
OS Version:
OS Platform: Linux
RID: gentoo-x64
Base Path: /opt/dotnet_core/sdk/2.1.302/
Host (useful for support):
Version: 2.1.2
Commit: 811c3ce6c0
Code to reproduce
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var uri = new Uri("/üri");
Console.WriteLine(uri.ToString()); // file:///%C3%BCri/üri
}
}
}
Above code prints "file:///%C3%BCri/üri" while "file:///%C3%BCri" is expected.
Using "/üri/üri" in the Uri ctor results in a path like "file:///%C3%BCri/%C3%BCri/üri/üri".
Paths with Unicode/UTF-8 incorrectly parsed/reported by System.Uri
General
As described by the title, paths with Unicode/UTF-8 characters are incorrectly parsed/reported by System.Uri resulting in an invalid path. For example the path "/üri" will result in an Uri like "file:///%C3%BCri/üri" (note the unescaped /üri at the end).
This also happens with other Unicode/UTF-8 characters like £, §, etc. So you can replace ü by any other Unicode/UTF-8 character in my example and see the same result, e.g. the path is doubled.
Expected Result
Results collected using mono 5.14 on the same Linux machine.
Actual Result
Using the .NET core version mentioned below.
System Informations
Code to reproduce
Above code prints "file:///%C3%BCri/üri" while "file:///%C3%BCri" is expected.
Using "/üri/üri" in the Uri ctor results in a path like "file:///%C3%BCri/%C3%BCri/üri/üri".