Нет ошибки - вы проверяете строку в отладчике, который автоматически экранирует строки - например, "Hello \ Goodbye"
будет отображаться в отладчике как "Hello \\ Goodbye"
.
Тем не менее, отладчик ведет себя по-разному, в зависимости от того, как вы просматриваете строку (а также, конечно, C # / VB):
- Наведите указатель мыши на строку (чаще всего), и вы получите экранированную версию во всплывающей подсказке
- Окно просмотра / Местные жители и т.д. также отображают экранированную версию
- Если вы выберете визуализатор «Текст», вы увидите неэкранированную версию - , которую вы должны сделать, чтобы действительно проверить вашу строку.
- HTML визуализатор делает именно то, что говорит на банке:)
Обновление
Хорошо, я пошел немного дальше и запустил VS2010, пожалуйста, создайте тестовый проект и выполните его до конца.
[TestMethod]
public void TestMethod1()
{
string a = @"`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:""<>?|";
Console.WriteLine("Original:");
Console.WriteLine("{0}", a);
string htmlEncoded = System.Web.HttpUtility.HtmlEncode(a);
Console.WriteLine("Html Encoded:");
Console.WriteLine("{0}", htmlEncoded);
}
(очевидно, я изначально использовал дословную строку, чтобы избежать экранирования чего-либо, кроме двойной кавычки).
Консольный вывод теста:
Original:
`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
Html Encoded:
`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
Точно так же, если вы остановите точку окончания теста и начнете копаться с визуализаторами:
Наведение (a
):
"`1234567890-=[]\\ ;',./\\~!@#$%^&*()_+{}|:\"<>?|"
т.е. это C # экранированный во всплывающей подсказке и заключенный в кавычки.
Наведение (htmlEncoded
):
"`1234567890-=[]\\ ;',./\\~!@#$%^&*()_+{}|:"<>?|"
.. опять же, в кодировке html и C # с кавычками
Текст (htmlEncoded
):
`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
.. Нет c # экранирования
HTML (htmlEncoded
):
`1234567890-=[]\ ;',./\~!@#$%^&*()_+{}|:"<>?|
В Times New Roman сценарий, конечно:)
Что, я считаю, возвращает нас к исходной строке - которая также показывает, что описываемый вами сценарий не может иметь место - если вы не прочитали экранированную строку как «правильную», хотя на самом деле это не так. HTML не требует \
для экранирования.