Кодировать from ø å из строки - PullRequest
1 голос
/ 21 апреля 2020

У меня есть строка, которая содержит различные знаки вместо отображения формата Дани sh ø ø å.

пример:

string s = "Jeg har et kv\u00c6g"

должно быть

string s = "Jeg har et kvæg"

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

например. strInput = strInput.Replace("\u00c6", "Æ");

Посмотрите на эту картинку, как выглядит моя строка. Даже с предложением это не работает: enter image description here

1 Ответ

0 голосов
/ 21 апреля 2020

Чтобы удалить экранированные символы (т.е. получить оригинальное представление), используйте Regex.Unescape ()

string text = @"Jeg har et kv\u00c6g"; 
Console.WriteLine(Regex.Unescape(text)); // out --> Jeg har et kvÆg

Демо: https://dotnetfiddle.net/yGEhw6

ОБНОВЛЕНИЕ

Regex.Unescape () может выдавать два исключения: ArgumentException (нераспознанная escape-последовательность) и ArgumentNullException (исходная строка равна нулю), и если данные не экранированы должным образом, вы получите ошибку.

\dr\u00f8jdal\ Just Dr\u00f8jdal    <-- your string
\\dr\u00f8jdal\\ Just Dr\u00f8jdal  <-- properly escaped string (expected by Regex)

Обходной путь зависит от необходимости, например, вы можете Unescape () только определенный шаблон

out = Regex.Replace(in, @"\\u00[a-z][0-9]", m => Regex.Unescape(m.Value));

, где \\u00[a-z][0-9] будет перехватывать все вхождения строк, таких как "\ u00c6", "\ u00f8", et c. но игнорируйте одиночное "\". Обратите внимание, что шаблон может зависеть от используемых символов, и вы можете настроить его, если некоторые из ваших символов не будут заменены.

Демо: https://dotnetfiddle.net/GDEN8k

...