Próbuję porównać dwa ciągi, ale jeden ciąg zawiera białe spacje na końcu. Użyłem Trim() i porównałem, ale nie zadziałało, ponieważ ta biała przestrzeń została przekształcona w% 20 i rzecz, którą Trim nie usuwa. to jest coś takiego, jak "abc"
i "abc%20"
, co mogę zrobić w takiej sytuacji, aby porównać ciągi, które ignorują przypadek?sposób obsługi% 20 podczas porównywania ciągów w C#
Odpowiedz
%20
to zakodowana w url wersja przestrzeni.
Nie można bezpośrednio rozebrać go wyłączyć za pomocą Trim()
, ale można użyć HttpUtility.UrlDecode() zdekodować %20
z powrotem do przestrzeni, a następnie przyciąć/zrobić porównanie dokładnie tak samo, jak w inny sposób;
using System.Web;
//...
var test1 = "HELLO%20";
var test2 = "hello";
Console.WriteLine(HttpUtility.UrlDecode(test1).Trim().
Equals(HttpUtility.UrlDecode(test2).Trim(),
StringComparison.InvariantCultureIgnoreCase));
> true
Czy próbowałeś tego?
string before = "abc%20";
string after = before.Replace("%20", "").ToLower();
Można użyć String.Replace
a ponieważ wymienionym przypadku niewrażliwość String.ToLower
tak:
var str1 = "abc";
var str2 = "Abc%20";
str1.Replace("%20", "").ToLower() == str2.Replace("%20", "").ToLower();
// will be true
użytkowania HttpUtility.UrlDecode dekodować ciągi:
string s1 = "abc ";
string s2 = "abc%20";
if (System.Web.HttpUtility.UrlDecode(s1).Equals(System.Web.HttpUtility.UrlDecode(s2)))
{
//equals...
}
w przypadku WinForms lub konsoli (lub dowolny inny niż ASP.NET), będziesz musiał dodać odniesienie do zespołu System.Web
w swoim projekcie.
"%20"
jest zakodowaną wersją adresu URL ' '
(spacja). Czy porównujesz zakodowany parametr adresu URL? Jeśli tak, możesz użyć:
string str = "abc%20";
string decoded = HttpUtility.UrlDecode(str); // decoded becomes "abc "
Jeśli potrzebujesz przyciąć wszystkie białe spacje, powinieneś zrobić to dla dekodowanego ciągu. Metoda Trim
nie rozpoznaje ani nie rozpoznaje zakodowanych znaków białych znaków.
decoded = decoded.Trim();
Teraz można porównać ze zmienną decoded
używając:
decoded.Equals(otherValue, StringComparison.OrdinalIgnoreCase);
StringComparison.OrdinalIgnoreCase
jest prawdopodobnie najszybszym sposobem bez uwzględniania wielkości liter porównania ciągów.
Coś jak:
if (System.Uri.UnescapeDataString("abc%20").ToLower() == myString.ToLower()) {}
[Uwaga na to] (http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unecapedatastring-in-url-decoding.aspx) . –
Masz rację, nie pomyślałem o tym. Dziękuję za poprawienie mnie. –
Wydaje się, że problemem jest korzeń, gdy jesteś z kodowaniem URL. Jeśli użyjesz kodowania znaków, nigdy nie otrzymasz% 20. Domyślne kodowanie używane przez HttpUtility.UrlEncode utf-8. tutaj jest wykorzystanie
System.Web.HttpUtility.UrlEncode("ãName Marcos", System.Text.Encoding.GetEncoding("iso-8859-1"))
I Here, on Microsoft website można przeczytać więcej na temat kodowania znaków. A jeśli zrobisz prawidłowe kodowanie można uniknąć resztę pracy
A oto co pytasz -
drugim przypadku - jeśli trzeba porównać dwa ciąg jak na swoje potrzeby, trzeba rozszyfrować HttpUtility.Urldecode (test)
bool result = HttpUtility.UrlDecode(stringOne).Equals(HttpUtility.UrlDecode(stringOne));
I wynik bool wie, czy są one równe lub nierówne
Console.WriteLine("Result is", result ? "equal." : "not equal.");
Nadzieja pomaga
- 1. Błąd porównywania ciągów znaków C#
- 2. ignoruj spacje podczas porównywania ciągów w pythonie
- 3. Jaki jest właściwy sposób obsługi ciągów char *?
- 4. Zrozumienie zachowania porównywania ciągów
- 5. Jak mogę zignorować akcenty podczas porównywania ciągów w Perlu?
- 6. Czy === w PHP jest binarnie bezpieczne podczas porównywania ciągów znaków?
- 7. porównywania ciągów zawierających przestrzeń == PHP
- 8. Lepszy sposób porównywania ciągów znaków, który mógłby być pusty.
- 9. Czy istnieje prosty sposób porównywania ciągów połączeń bez samodzielnego analizowania?
- 10. C# bardziej skuteczny sposób porównywania dwóch zbiorów
- 11. C# metoda porównywania ciągów zwracająca indeks pierwszego niezgodnego
- 12. Najlepszy sposób porównywania dwóch dużych list ciągów przy użyciu C# i LINQ?
- 13. Najlepszy sposób obsługi przepełnienia Integer w C#?
- 14. Python Jinja podczas porównywania ciąg
- 15. porównywania ciągów w liście do strun w liście
- 16. Sprawdzone metody obsługi ciągów Azure
- 17. Jaka jest luka w tej logice porównywania ciągów znaków?
- 18. Szybki sposób porównywania danych wejściowych
- 19. Dlaczego nie używamy == do porównywania ciągów znaków w Matlab
- 20. Najlepszy sposób na złamanie długich ciągów w kodzie źródłowym C#
- 21. Linux C lub C++ biblioteka do porównywania i łatania ciągów znaków?
- 22. Łańcuch porównywania ze znakami specjalnymi w języku C#
- 23. Właściwy sposób ustawiania ciągów połączeń w ci podczas msbuild/wdrożyć
- 24. Niezawodny sposób (programowo) porównywania plików PDF?
- 25. Preferowany sposób porównywania struktury do zera
- 26. Porównanie ciągów znaków Javascript kończy się niepowodzeniem podczas porównywania znaków Unicode.
- 27. Jaka jest różnica między funkcjami porównywania ciągów znaków Delphi?
- 28. Sposób obsługi okna przesyłania plików Windows podczas używania selenu
- 29. W jaki sposób cyfry 1101004800 odpowiadają numerowi 20?
- 30. Jaki jest właściwy sposób obsługi zdarzeń w C++?
Używaj Server.UrlDecode ("abc% 20") przed porównania lub napisać własny comparer, które to obsługują. – Giedrius