Mit C#, ich hole einen TextBox.Text
Wert von einer .ascx-Seite. Wenn ich die Gleichheit des Werts mit einem regulären String-Objekt innerhalb einer LINQ-Abfrage vergleiche, gibt es immer false zurück.C# - Vergleichen von Zeichenfolgen verschiedener Kodierungen
Ich bin zu dem Schluss gekommen, dass sie unterschiedlich kodiert sind, aber bisher kein Glück hatten, sie zu konvertieren oder zu vergleichen.
docname = "Testdoc 1.docx"; //regular string created in C#
fetchedVal = ((TextBox)e.Item.FindControl("txtSelectedDocs")).Text; //UTF-8
Die beiden oben genannten Strings identisch sind, wenn sie als Literale dargestellt, aber die byte[]
vergleichen sie sind offensichtlich unterschiedlich aufgrund der Codierung.
Ich habe eine Menge verschiedenen Dinge ausprobiert, wie zum Beispiel:
System.Text.Encoding.Default.GetString(utf8.GetBytes(fetchedVal));
aber das wird den Wert "Testdoc 1.docx"
zurückzukehren.
Wenn ich stattdessen
versuchenSystem.Text.Encoding.Default.GetString(System.Text.Encoding.Default.GetBytes(fetchedVal));
es gibt "Testdoc 1.docx"
aber eine Equals()
-check noch false
zurückgibt.
Ich habe auch die folgende versucht, die die empfohlene Vorgehensweise zu sein scheinen, aber ohne Glück:
byte[] utf8Bytes = Encoding.UTF8.GetBytes(fetchedVal);
byte[] unicodeBytes = Encoding.Convert(Encoding.UTF8, Encoding.Unicode, utf8Bytes);
string fetchedValConverted = Encoding.Unicode.GetString(unicodeBytes);
Der Täter scheint das Leerzeichen zu sein, denn wenn die Byte-Reihenfolge der Prüfung ist es immer das siebte Byte das ist anders.
Wie konvertiert man richtig von UTF-8 zu Standard-String-Codierung in C#?
Ich bin nicht sicher, was genau das Problem hier ist, aber ich möchte Sie auf die Normalize-Funktion der Zeichenfolge verweisen. Ich weiß nicht, ob das dein Problem behebt, aber es könnte nützlich sein, die Strings vor dem Vergleich zu normalisieren. http://msdn.microsoft.com/en-us/library/system.string.normalize(v=vs.110).aspx –
Siehe @SLaks Antwort, dies hat nicht mit der Codierung zu tun. In .NET sind alle Zeichenfolgen identisch, nämlich Unicode, das in UTF-16 codiert ist. Der Schuldige ist hier ein nicht-brechendes Leerzeichen, siehe [Probleme mit der HTML-Codierung - "Zeichen" anstelle von " "] (http://stackoverflow.com/questions/1461907/html-encoding-issues-%C3% 82-stelliges Zeichen-statt-von-nbsp). Woher kommt dieser Text in Ihrem Textfeld und wie wird er ausgegeben? – CodeCaster
Nur als Antwort auf @DavidS. Habe ich auch die 'Normalize'-Funktion untersucht, ohne Erfolg. @CodeCaster, der 'TextBox.Text' wird von JQuery gesetzt. Ich habe die Tatsache übersehen, dass es daran liegen kann! –