Ошибка cs1009 нераспознанная escape последовательность

I have created a site with the following connection string.

I am getting the following error message any help would be really appreciated.

Compiler Error Message: CS1009: Unrecognized escape sequence
Line 21: ad.DataFile = "D:Hosting9372580htmlpearlPearl.mdb";

my codes:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;

public partial class html_Show_Projinfo : System.Web.UI.Page
{
    OleDbCommand cmd;
    OleDbConnection con = new OleDbConnection();
    OleDbDataReader rd;
    protected void Page_Load(object sender, EventArgs e)
    {
        int id = Convert.ToInt32(Request.QueryString["id"]);
        con.ConnectionString = ConfigurationManager.ConnectionStrings["pearl"].ToString();
        cmd = new OleDbCommand("Select * from Pearl_Projects where ProjectId=" + id, con);
        con.Open();
        rd = cmd.ExecuteReader();
        string ns;
        while (rd.Read())
        {
            Label2.Text = rd["ProjectName"].ToString();
            ns = rd["Shortdes"].ToString();
            if (ns.Length > 541)
            {
                Label1.Text = ns.Substring(0, 541);
            }
            else
            {
                Label1.Text = ns.Substring(0, ns.Length);
            }            

            Label3.Text = rd["Description"].ToString();
            Label4.Text = rd["location"].ToString();
        }
        rd.Close();
        con.Close();

        //con.Open();
        //cmd = new OleDbCommand("Select ProjectId from Pearl_ProjectDetails where DetailId=" + id, con);
        //int j = Convert.ToInt32(cmd.ExecuteScalar());
        //con.Close();

        //con.Open();
        //cmd = new OleDbCommand("Select ProjectName from Pearl_Projects where ProjectId=" + j, con);
        //Label1.Text = cmd.ExecuteScalar().ToString();
        //con.Close();
        if (Label4.Text == "")
        {
            Label4.Visible = false;
            Label5.Visible = false;
        }
        else
        {
            Label4.Visible = true;
            Label5.Visible = true;
        }
        AccessDataSource ad = new AccessDataSource();
        ad.DataFile = "D:Hosting9372580htmlpearlPearl.mdb";
        ad.SelectCommand = "SELECT top 3 ProjectId,ProjectName,Status FROM [Pearl_Projects] where Status=no Order by ProjectId Desc";
        DataList1.DataSource = ad;
        DataList1.DataBind();

        AccessDataSource ad1 = new AccessDataSource();
        ad1.DataFile = "D:Hosting9372580htmlpearlPearl.mdb";
        ad1.SelectCommand = "SELECT top 3 ProjectId,ProjectName,Status FROM [Pearl_Projects] where Status=yes Order by ProjectId Desc";
        DataList2.DataSource = ad1;
        DataList2.DataBind();
    }
}

ekad's user avatar

ekad

14.4k26 gold badges44 silver badges46 bronze badges

asked Jul 3, 2013 at 19:36

Efe's user avatar

0

escape those in lines like the following

ad.DataFile = "D:Hosting9372580htmlpearlPearl.mdb";

you can either manually escape them all like so

ad.DataFile = "D:\Hosting\9372580\html\pearl\Pearl.mdb";

or you can make it a literal string

ad.DataFile = @"D:Hosting9372580htmlpearlPearl.mdb";

the character '' begins what is called an «Escape Sequence», and it essentially that you’re using 2 characters to represent 1(special) character.

for instance, n is a newline character, is null, and \ is

answered Jul 3, 2013 at 19:38

Sam I am says Reinstate Monica's user avatar

0

answered Jul 3, 2013 at 19:40

AM_Hawk's user avatar

AM_HawkAM_Hawk

6611 gold badge15 silver badges33 bronze badges

I know that there are few questions with answers with the same title, but I couldn’t find my answer there.
I am getting this error when I moved my code from my other computer. On the other computer the application was working fine. I tried to debug the code without success.

Line 45: BeginContext("~/Views/_ViewStart.cshtml", 0, 57, true);
Line 46: 
Line 47: WriteLiteral   ("\\\\\\\\\\\\\\\\\\\\\\\\\\\\");
Line 48: 
Line 49: EndContext("~/Views/_ViewStart.cshtml", 0, 57, true);

Содержание

  • Строка в C#
  • Создание строк в C#
    • Строки с регулярными и буквальными литералами
  • Неизменяемость строк в C#
  • Итого

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Большое количество задач (если не большинство) при разработке программного обеспечения так или иначе связано с обработкой строк будь то простой вывод в консоль определенных значений, сравнение строк или парсинг текста web-страниц. Так или иначе, даже при первом знакомстве с языком программирования, первое, что мы делаем — это используем строки («Hello world» и т.д.). Именно поэтому умение работы со строками в C#, как и в любом другом языке программирования, является одним из необходимых и важных навыков программиста. В этой и нескольких последующих статьях мы рассмотрим основные возможности работы со строками в C#.

Строки в C# относятся к неизменяемым типам данных и представляют собой объекты класса System.String. Объекты этого класса представляют текст в виде последовательности символов Unicode. То есть, в отличие от Delphi, где есть и UnicodeString и AnsiString и т.д. и т.п, в C# строка — это всегда набор символов Unicode. Однако, при необходимости, никто не мешает нам изменять кодировку символов в строке C# и об этом мы тоже поговорим.

Также, для тех, кто уже имел дело с другими языками программирования, не лишним будет знать, что в конце строки C# нет нуль-символов. Поэтому строка в C# мы можем создавать строки, которые содержат любое количество внедренных нуль-символов (). При этом, максимальный размер объекта String в памяти составляет 2 Гб.

Создание строк в C#

Объявление и создание строк в C# можно осуществить несколькими способами. Рассмотрим основные из них.

string str1; //объявили переменную типа string
str1 = "Привет";//присвоили строке значение
//объявили и создали строку из двух символов 'a'
string str2 = new String('a', 2);
//объявили и создали строку из массива символов
char[] letters = { 'H', 'e', 'l', 'l', 'o' };
string helloString = new string(letters);
//объявили и создали пустую строку
string emptyStr = string.Empty;

В любом из представленных выше примеров мы создаем строку, при этом, в последнем случае, мы создаем пустую строку без символов. Так как строки относятся к ссылочным типам данных, то никто нам не запрещает присвоить строке значение null

string nullStr = null;

хотя, разработчики C# и предупреждают нас о том, что использование string.Empty вместо null предпочтительнее и  снижает вероятность получения исключения типа NullReferenceException.

Строки с регулярными и буквальными литералами

Отдельное внимание при создании строк также стоит уделить такому моменту, как создание строк, содержащих какие-либо служебные символы. Например, если вам необходимо присвоить строке значение, указывающее на путь к файлу: c:Program Filesdotnetdotnet.exe. Если вы попробуете присвоить строке это значение как есть, то ваша программа даже не будет скомпилирована, так как Visual Studio укажет вам на ошибку:

Ошибка CS1009 Нераспознанная escape-последовательность

Все дело в том, что символ обратной косой черты используется в строках для указания так называемых escape-последовательностей и для того, чтобы создать строку, содержащую символ  нам необходимо либо регулярный строковый литерал, либо буквальный литерал, как показано ниже:

//использование регулярного литерала
string path = "c:\Program Files\dotnet\dotnet.exe";
//использование буквального литерала
string path2 = @"c:Program Filesdotnetdotnet.exe";

Использование регулярного литерала позволяет нам использовать различные escape-последовательности в строках. В таблице ниже представлены основные escape-последовательности в C#:

Escape-последовательность Имя символа Кодировка Юникод
Одинарная кавычка 0x0027
» Двойная кавычка 0x0022
\ Обратная косая черта 0x005C
Null 0x0000
a Предупреждение 0x0007
b Backspace 0x0008
f Перевод страницы 0x000C
n Новая строка 0x000A
r Возврат каретки 0x000D
t Горизонтальная табуляция 0x0009
v Вертикальная табуляция 0x000B
u Escape-последовательность Юникода (UTF-16) uHHHH (диапазон: 0000–FFFF; пример: u00E7 = «ç»)
U Escape-последовательность Юникода (UTF-32) U00HHHHHH (диапазон: 000000–10FFFF; пример: U0001F47D = «👽»)
x Escape-последовательность Юникода аналогична «u», она отличается только длиной переменной xH[H][H][H] (диапазон: 0–FFFF; пример: x00E7 или x0E7 или xE7 = «ç»)

Например, используя escape-последовательности, мы можем вывести в консоль таблицу:

//выводим в консоль таблицу 3х3
Console.WriteLine("НомерtЗначениеtОписание");
Console.WriteLine("1t0,1ttописание 1");
Console.WriteLine("2t0,2ttописание 2");
Console.WriteLine("3t0,3ttописание 3");

В итоге, в консоли мы увидим вот такую красивую табличку:

Что касается использования буквального литерала в строках, то его удобно использовать для того, чтобы сделать строки, содержащие какие-либо служебные символы, более читабельными. Согласитесь, что такая строка:

string path2 = @"c:Program Filesdotnetdotnet.exe";

выглядит более читабельной, чем вот такая:

string path = "c:\Program Files\dotnet\dotnet.exe";

Более того, так как буквальный литерал позволяет сохранять все символы в строке как есть, то, используя его, мы можем использовать в наших строках переносы, кавычки и прочие символы как есть, например:

//использование буквального литерала
            string str = @"Эта строка содержит символ  , а также одинарные кавычки 'текст в кавычках' 
                           и переносы строки
                           ";

В результате, в консоли мы увидим следующий текст:

Неизменяемость строк в C#

Как уже упоминалось выше, строки в C# относятся к неизменяемым типам данных. Что это значит для нас? А это значит, что при каждом присвоении значения переменной типа string система вначале освобождает память, занятую строкой, а затем выделяет по новой и только потом записывает новое значение. С одной стороны, подобный подход выглядит нерациональным — лишние освобождения и выделения памяти, но, с другой стороны, таким образом разработчики C# обеспечили максимальную безопасность работы со строками и, надо сказать, сделали это достаточно элегантно и понятно. Например,

string str4; //объявили переменную
str4 = "hello"; //выделили память под 5 символов и присвоили значение переменной
str4 = "hello world";//освободили память, по новой выделили память уже под 11 символов и присвоили новое значение

Также стоит отметить, что когда содержимое двух строк, например, s1 и s2 объединяется для формирования строки, то две исходные строки не изменяются. Например:

string s1 = "Hello ";
string s2 = "world";

s1 += s2;
Console.WriteLine(s1);

В примере выше оператор += создает новую строку, которая содержит объединенное содержимое двух строк. Этот новый объект присваивается переменной s1, а исходный объект, который был присвоен s1, освобождается для сборки мусора, так как ни одна переменная не ссылается на него.

Если вы создадите ссылку на строку, а затем «измените» исходную строку, ссылка будет по-прежнему указывать на исходный объект, а не на новый объект, который был создан при изменении строки. Пример:

string s1 = "Hello ";
string s2 = s1;
s1 += "World";
Console.WriteLine(s2);

В представленном примере может показаться, что в итоге, в консоли будет строка "Hello world", однако, на самом деле в консоли мы увидим только "Hello "так как строка s2 остается неизменной.

Итого

Сегодня мы узнали как создавать строки в C#, как использовать различные escape-последовательности в строках, а также использовать буквальный литерал для повышения читабельности строк в C#. Также рассмотрели некоторые моменты, касающиеся неизменности строк в C# и как эта неизменность проявляется.

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Я пытался создать свое решение для веб-приложения, и каждый раз я получаю этот код из файла Index.g.cshtml.cs, и когда я перехожу к файлу, строка, вызывающая проблему, выглядит так:

WriteLiteral("rn        </div>rn    </div>rnrn    <div class="col-md-3">rn        <p>This is a fun site to do some buying of dutch products.</p>rn    </div>                     ");

Может кто-нибудь, пожалуйста, помогите, это действительно расстраивает …


Ответы
2

вы можете использовать

WriteLiteral(@"rn        </div>rn    </div>rnrn    <div class="col-md-3">rn        <p>This is a fun site to do some buying of dutch products.</p>rn    </div>                     ");

Когда я пишу ваш код, он имеет синтаксическую ошибку «,» ожидается (перед col-md-3) и неожиданный символ после col-md-3


— Kristijan Vidojkovic

11.10.2018 22:41

WriteLiteral (@ » r n </div> r n </div> r n r n <div class = » «col — md — 3 » «> r n <p > Это забавный сайт, где можно купить голландские товары. </p> r n </div> «) ;


— Code First

11.10.2018 22:52

Это ничего не меняет. Как только я что-то меняю в Index.cshtml, он возвращается к предыдущему состоянию и снова вызывает ту же проблему.


— Kristijan Vidojkovic

11.10.2018 22:57

Index.g.cshtml.cs — это автоматически сгенерированный файл. Откройте файл Index.cshtml и найдите маленькие волнистые красные линии, указывающие на ошибку. Ошибка, вероятно, исходит из конца строки (после тега закрытия div), где у вас есть все эти обратные косые черты. Удалите эти обратные косые черты или, если они вам действительно нужны, удвойте их все («\» в коде фактически отобразит для вашего пользователя)

<div class = «col-md-3»> <p> Это забавный сайт, на котором можно купить голландские продукты. </p> </div> Это код в моем Index.cshtml, которого у меня нет волнистые красные линии или в моем коде …


— Kristijan Vidojkovic

11.10.2018 22:45

Разместите свой код для Index.cshtml, и я смогу помочь. Похоже, что эта часть кода, вероятно, заключена в кавычки, и это не обязательно, но это всего лишь предположения, если вы не показываете код.


— Dave Smash

11.10.2018 22:54

У меня было много пробелов после последнего элемента div O__________O, спасибо за вашу быструю помощь … Новичок на этом сайте, отличное время отклика !!!


— Kristijan Vidojkovic

11.10.2018 23:00

Другие вопросы по теме

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS1009: Unrecognized escape sequence

Source Error:


Line 42:         
Line 43:         public override void Execute() {
Line 44: WriteLiteral("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +
Line 45: "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +
Line 46: "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +

Source File: c:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Filesroot9d389ed92c615f86App_Web_index.cshtml.c114ca27.wbkbq-st.0.cs    Line: 44 

Кто-то проверяет, что вчера проект работал нормально, а сегодня — нет. он компилируется и собирается без каких-либо проблем, но не работает.

2013-10-29 03:14

4
ответа

В строке 44: у вас 81 обратная косая черта. В строках 45 и 46 у вас есть 80 каждая. При использовании в строковом литерале символ обратной косой черты используется как символ «escape» для обозначения таких вещей, как новые строки и табуляции. Если вы действительно хотите использовать обратную косую черту в вашей строке, вам нужно указать 2 последовательных обратных слеша для каждого желаемого обратного слеша. Так как в строке 44 у вас нечетное количество обратных слешей, вы получаете ошибку.

Если вам действительно нужно такое количество обратных слешей, вы можете отключить escape-символ в C#, поставив перед строковым литералом символ @, например так:

WriteLiteral(@"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
           + @"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
           + @"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"

Кроме того, вы можете удалить одну из обратных косых черт из строки 44.

2013-10-29 03:40

Просто используйте этот конструктор

new String('\', 80)

чтобы получить строку из 80 обратных слешей.

2013-10-29 04:39

Я получил то же самое, это автоматический код, мой проект ASP.net с MVC 4, Razor. Этот код не введен нами. Только получая эту ошибку при новом развертывании, другие развертывания того же кода работают нормально,

Описание: во время компиляции ресурса, необходимого для обслуживания этого запроса, произошла ошибка. Пожалуйста, просмотрите следующие конкретные подробности ошибки и измените свой исходный код соответствующим образом.

Compiler Error Message: CS1009: Unrecognized escape sequence

Source Error:


Line 42:         
Line 43:         public override void Execute() {
Line 44: WriteLiteral("\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +
Line 45: "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +
Line 46: "\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" +

Source File: c:WindowsMicrosoft.NETFramework64v4.0.30319Temporary ASP.NET Filesroote22c255992c7e946App_Web__viewstart.cshtml.cdcab7d2.gtokpxja.0.cs    Line: 44 

2014-11-26 17:59

Проблема здесь (как упоминалось в ответе Бо Флексона) заключается в автоматически сгенерированном коде, а не в физическом написании представления с (большим) нечетным числом символов косой черты в нем.

Одно из решений, описанных в ответе на этот вопрос, заключается в простой перекомпиляции и повторном развертывании.

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

2016-04-15 09:29

Понравилась статья? Поделить с друзьями:
  • Ошибка crash dump error как исправить
  • Ошибка crash dmp
  • Ошибка create2dtexture call of duty modern warfare remastered
  • Ошибка cpu экскаватор кобелко
  • Ошибка create 2dt texture