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]
).