Przy użyciu C#, pobieram wartość TextBox.Text
ze strony .ascx. Kiedy porównam równość wartości do zwykłego obiektu napisanego w zapytaniu LINQ, zawsze zwraca on wartość false.C# - Porównywanie ciągów różnych kodowań
Doszedłem do wniosku, że są one różnie zakodowane, ale jak dotąd nie miały szczęścia w ich przekształcaniu lub porównywaniu.
docname = "Testdoc 1.docx"; //regular string created in C#
fetchedVal = ((TextBox)e.Item.FindControl("txtSelectedDocs")).Text; //UTF-8
Powyższe dwa ciągi są identyczne, jeśli reprezentowane literałach, ale w porównaniu z byte[]
są oczywiście różne w wyniku kodowania.
Próbowałem wiele różnych rzeczy, takich jak:
System.Text.Encoding.Default.GetString(utf8.GetBytes(fetchedVal));
jednak, że zwróci wartość "Testdoc 1.docx"
.
Gdybym zamiast próbować
System.Text.Encoding.Default.GetString(System.Text.Encoding.Default.GetBytes(fetchedVal));
powraca "Testdoc 1.docx"
ale Equals()
-Check nadal zwraca false
.
Próbowałem również następujące dane, które wydają się być zalecane podejście, ale bez powodzenia:
byte[] utf8Bytes = Encoding.UTF8.GetBytes(fetchedVal);
byte[] unicodeBytes = Encoding.Convert(Encoding.UTF8, Encoding.Unicode, utf8Bytes);
string fetchedValConverted = Encoding.Unicode.GetString(unicodeBytes);
Sprawca wydaje się być spacje, ponieważ badając sekwencję bajtów to zawsze siódmy bajt to się różni.
Jak poprawnie przekonwertować kodowanie UTF-8 do domyślnego w C#?
Nie jestem pewien, jaki jest dokładnie tutaj problem, ale chcę skierować cię do funkcji Normalize napisu. Nie wiem, czy to rozwiąże problem, ale może być przydatne, aby znormalizować ciągi przed porównaniem ich. http://msdn.microsoft.com/en-us/library/system.string.normalize(v=vs.110).aspx –
Zobacz odpowiedź @SLaks, nie ma to związku z kodowaniem. W .NET wszystkie ciągi są równe, a mianowicie kodowanie Unicode w UTF-16. Winowajcą jest niepodzielona przestrzeń, zobacz [Kody HTML - zamiast " "] pojawia się znak "Â" (http://stackoverflow.com/questions/1461907/html-encoding-issues-%C3% 82-znakowy pokaz-up-zamiast-nbsp). Gdzie jest wklejony ten tekst w skrytce tekstowej i jak jest wysyłany? – CodeCaster
Podobnie jak w odpowiedzi na @DavidS., Również odkryłem funkcję 'Normalize', bez powodzenia. @CodeCaster, "TextBox.Text" jest ustawiony z JQuery. Brakowało mi tego, że może to być spowodowane! –