Есть строка вида
string s ="\u0431\u044b\u0442\u044c 12 \u0446\u0438\u0444\u0440."
Если я её вставляю в какой-нибудь онлайн сервис, то оно успешно декодируется как
быть 12 цифр.
И онлайн сервис показывает разные кодировки, автоматические им подобранные. Например, что исходный текст был unicode, а после перевода - UTF8
Ок, пишем тоже самое на С#
string substring ="\u0431\u044b\u0442\u044c 12 \u0446\u0438\u0444\u0440."
Encoding utf8 = Encoding.UTF8;
Encoding unicode = Encoding.Unicode;
// Convert the string into a byte array.
byte[] unicodeBytes = unicode.GetBytes(substring);
// Perform the conversion from one encoding to the other.
byte[] utf8Bytes = Encoding.Convert(unicode, utf8, unicodeBytes);
// Convert the new byte[] into a char[] and then into a string.
char[] utf8Chars = new char[utf8.GetCharCount(utf8Bytes, 0, utf8Bytes.Length)];
utf8.GetChars(utf8Bytes, 0, utf8Bytes.Length, utf8Chars, 0);
string utf8String = new string(utf8Chars);
Console.WriteLine(utf8string);
И на выходе получаем точно такой же
\u0431\u044b\u0442\u044c 12 \u0446\u0438\u0444\u0440.
Как я понимаю, я неправильно понял саму суть кодировки - кодировка кодирует байты, а строка изначально уже закодирована чем то внутренним в C#, возможно, тем же UTF8, поэтому он и не пытается перекодировать символы \u0431 и остальные в кириллицу, а просто считает что строка и так уже в UTF8.
Вопрос - как скормить декодеру эти самые escape-последовательности, означающие какие то киррилическим символы, чтобы в итоге он выдал мне то же самое, что и онлайн сервисы?
По запросу комментаторов вывел utf8chars, это массив чаров, поэтому вывел через foreach
вывод
\
u
0
4
4
с
1
2
Комментарий после верного ответа.
ответ дан 32 минуты назад
@vp_arth
Regex.Unescape помог. Действительно, неудобно получилось - я хотел сократить вопрос, поэтому написал строку заранее. Но на самом деле я получаю эту строку из веб реквеста, и при её выводе получаю недекодированные символы. Если взять символы снова и просто забить их в строку - всё выводится корректно. Видимо, строка как раз и делает Regex.Unescape в первый раз, поэтому повторно выводит корректно
В такой строке уже декодированные символы:
Console.WriteLine("\u0431\u044b\u0442\u044c 12 \u0446\u0438\u0444\u0440.");
// быть 12 цифр.
А тут сырая строка со слешами, их можно, например, заменить вручную:
string s = @"\u0431\u044b\u0442\u044c 12 \u0446\u0438\u0444\u0440.";
Console.WriteLine(s);
// \u0431\u044b\u0442\u044c 12 \u0446\u0438\u0444\u0440.
Regex rx = new Regex( @"\\u([0-9a-f]{4})");
s = rx.Replace(s, match => ((char) Int32.Parse(match.Value.Substring(2), NumberStyles.HexNumber)).ToString() );
Console.WriteLine(s);
// быть 12 цифр.
Или проще:
Console.WriteLine(Regex.Unescape(@"\u0431\u044b\u0442\u044c 12 \u0446\u0438\u0444\u0440."));
// быть 12 цифр.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
у меня есть спавнер, и нужно чтоб он через время удалял объект что заспавнил, и вот я думаюкак мне повесить скрипт на уже СОЗДАННУЮ КОПИЮ, или...
помогите реализовать логику генерации монетокВ целом код работает, только выдает ошибку Null Reference из-за того, что монетка не создана, а я пытаюсь...
Задача с юлёрна https://ulearnme/course/basicprogramming/Praktika_Parser_predlozheniy__d41a27ad-a377-4fbd-ba1c-1bd761c69dd1
Доброе время суток, Взял хостинг goodhostkz, добавил проект и импортировал БД, но не как не могу настроить строку подключение