Member 13050667 Ответов: 2

C# как кодировать HTML специальные символы типа "<" в "\u003c"


У меня есть Json-файл, который также содержит HTML-текст.
Я манипулировал текстом, но теперь мне нужно преобразовать обратно специальные символы, как они были первоначально. (unicode "\u003c" вместо реального символа "<")

Есть ли для этого встроенный метод?

Оригинальный текст:
\u003cb\u003eTop Secret\u003c/b\u003e

После модификации:
<b>Szigorúan Titkos</b>

После обратного преобразования файла в Json HTML-теги отображаются как они есть или как сущности, но не в юникоде, как в исходном файле.

Что я уже пробовал:

- изменение кодировки /возможно, неправильный путь, так как не было никакого успешного результата/

2 Ответов

Рейтинг:
9

Richard Deeming

Если вы используете JSON.NET, вы можете указать StringEscapeHandling.EscapeHtml чтобы избежать всех HTML-символов (<, >, &, ', ") и управляющих символов (например, новой строки).

Перечисление StringEscapeHandling[^]

const string json = @"""\u003cb\u003eTop Secret\u003c/b\u003e""";

string deserialized = JsonConvert.DeserializeObject<string>(json);
// deserialized === "<b>Top Secret</b>"

var settings = new JsonSerializerSettings { StringEscapeHandling = StringEscapeHandling.EscapeHtml };
string serialized = JsonConvert.SerializeObject(deserialized, settings);
// serialized === "\u003cb\u003eTop Secret\u003c/b\u003e"

Кроме того, вы можете написать свой собственный JsonConverter чтобы получить больше контроля над сериализацией:
Пользовательский JsonConverter<T>[^]


Maciej Los

5ed!

Рейтинг:
19

OriginalGriff

Попробовать это:

string escaped = @"\u003cb\u003eTop Secret\u003c/b\u003e";
string unescaped = Regex.Unescape(escaped);


Member 13050667

Спасибо, это тоже пригодится позже, но я думаю, что это не то, что мне нужно.
Извините, если я недостаточно ясно выразился.
В основном я хочу конвертировать обратно символы типа "<" в "\u003c". Никаких "<" или "&lt;", мне нужно "\u003c"! :)
Я надеюсь, что это немного прояснится :) извините за путаницу, или если я что-то неправильно понял.

Maciej Los

:Д :большой палец вверх: