C# - сравнение строк различных кодировок

используя C#, я получаю TextBox.Text значение из an .страница ascx вносятся. Когда я сравниваю равенство значения с обычным строковым объектом внутри LINQ-запроса, он всегда возвращает false.

Я пришел к выводу, что они по-разному закодированы, но до сих пор не удалось преобразовать или сравнить их.

docname = "Testdoc 1.docx"; //regular string created in C#
fetchedVal = ((TextBox)e.Item.FindControl("txtSelectedDocs")).Text; //UTF-8

вышеуказанные две строки идентичны при представлении в виде литералов, но сравнение byte[] они, очевидно, отличаются из-за кодирование.

я пробовал много разных вещей, таких как:

System.Text.Encoding.Default.GetString(utf8.GetBytes(fetchedVal));

но это вернет значение "Testdoc 1.docx".

если я вместо этого попробую

System.Text.Encoding.Default.GetString(System.Text.Encoding.Default.GetBytes(fetchedVal));

возвращает "Testdoc 1.docx" но Equals()-проверка все еще возвращает false.

я также попробовал следующее, что, похоже, является рекомендуемым подходом, но не повезло:

byte[] utf8Bytes = Encoding.UTF8.GetBytes(fetchedVal);
byte[] unicodeBytes = Encoding.Convert(Encoding.UTF8, Encoding.Unicode, utf8Bytes);
string fetchedValConverted = Encoding.Unicode.GetString(unicodeBytes);

виновником кажется пробел, потому что при рассмотрении байта последовательность это всегда седьмой байт, который отличается.

Как правильно конвертировать из UTF-8 в кодировку строк по умолчанию в C#?

1 ответов


строки не имеют кодировок или байтовых массивов. Кодировки вступают в игру только при преобразовании строки в массив байтов; это можно сделать, только указав, какую кодировку использовать для выбора байтов.

похоже, что у вас на самом деле просто разные символы в ваших строках. У вас может быть невидимый персонаж в одном из них, или у них могут быть разные символы, которые выглядят одинаково.

чтобы узнать, посмотрите на значения кодовой точки Unicode каждого символа в каждой строке (например, (int) str[0]).