Моя проблема связана с тем, что библиотеки .Net Http / Uri не могут декодировать или удалять эту последовательность символов: «Привет% E1».
Ни Uri.UnescapeDataString , ни HttpUtility.UrlDecode не могут этого сделать.
Хотя у меня есть решение, чтобы обойти эту проблему ( путаница с декодированием URL ), я хотел бы понять, почему она не работает.
1-й тест здесь вызывает исключение! Второй просто не получается.
Assert.That(Uri.UnescapeDataString("Hi%E1"), Is.EqualTo("Hiá"));
HttpUtility.UrlDecode("Hi%E1").ShouldBe("Hiá");
В документах нет ничего, что указывало бы на то, что UnescapeDataString или UrlDecode ограничены наборами символов или любой причиной, по которой эти тесты не пройдут. Однако из тестирования может показаться, что HttpUtility предполагает кодировку UTF-8 (или некоторую другую).
Эквивалент Java работает! Возможно, потому что это позволяет установить кодировку.
URLDecoder.decode("Hi%E1","windows-1252"); // this works btw, ie passes tests
Это выглядит как очень разумный шаг, учитывая обходной путь .Net (см. URL выше)
.Net .Net реализации этих методов просто дерьмо и разработчики .Net просто должны написать свои собственные - или я что-то упустил?
Кстати, все, что я знаю в IIS, установлено на UTF-8 , и китайские / японские символы отображаются нормально, поэтому я пока не знаю, как могло случиться, что этот URI состоит из windows-1252 закодированные символы. Если бы я мог исправить URI так, чтобы он содержал кодировку UTF-8, это был бы лучший способ исправить это.