Символы переноса в C# работают по-разному

404

Client
Регистрация
23.09.2011
Сообщения
116
Благодарностей
62
Баллы
28
Привет, всем. Много времени угробил на решение своей задачи в составлении JSON запроса, пока не понял, что столкнулся с технической проблемой.
С помощью кода, который визуализирует каждый символ строки:
C#:
string text1 = project.Variables["Text"].Value; // в переменной One\n\nTwo\n\nThree
string text2 = "One\n\nTwo\n\nThree";

var characterList1 = String.Join(",", text1.Select(c => ((int)c).ToString()));
var characterList2 = String.Join(",", text2.Select(c => ((int)c).ToString()));

project.Variables["result"].Value = ($"CharacterList1:  {characterList1}\nCharacterList2:  {characterList2}");
убедился, что символы переноса обрабатываются не совсем одинаково. Как раз в том месте, где стоит перенос строки

129766

Текст одинаковый, не содержит невидимых символов и лишних пробелов.

Разумеется, результат, который короче, для меня правильный. В переменной "Text" всегда будет разный текст.
Zenno 7.7.18.1
Может кто-нибудь знает, какой костыль придумать?
 

Alex91

Активный пользователь
Регистрация
15.08.2024
Сообщения
423
Благодарностей
104
Баллы
43
А если так ?
string text2 = @$"One\n\nTwo\n\nThree";
 

404

Client
Регистрация
23.09.2011
Сообщения
116
Благодарностей
62
Баллы
28
А если так ?
string text2 = @$"One\n\nTwo\n\nThree";
Спасибо за вариант. Мне нужно работать с переменной, а текст в ней содержит другие байт, по сравнению с обычной строкой. Ощущение, что под капотом Зенно текст из переменной project.Variables["Text"].Value как-то еще обрабатывается
 

Alex91

Активный пользователь
Регистрация
15.08.2024
Сообщения
423
Благодарностей
104
Баллы
43
Спасибо за вариант. Мне нужно работать с переменной, а текст в ней содержит другие байт, по сравнению с обычной строкой. Ощущение, что под капотом Зенно текст из переменной project.Variables["Text"].Value как-то еще обрабатывается
Ничего не обрабатывается.
Ты записываешь управляющие символы в переменную зенки, думая что они преобразуются в перенос... Но там могут быть только текстовые данные. Поэтому что записал, то и есть.
А c# сначала компилирует код и если ты не указал, что данные должны быть чистая строка, то он преобразует управляющие символы и ты получаешь измененную строку.

Если поставишь этот код string text2 = @$"One\n\nTwo\n\nThree"; то компилятор не будет преобразовывать управляющие символы и на выходе получишь одинаковый результат с данными из переменной зенки.
 
Последнее редактирование:

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
782
Благодарностей
529
Баллы
93
Привет, всем. Много времени угробил на решение своей задачи в составлении JSON запроса, пока не понял, что столкнулся с технической проблемой.
Сделайте так:
string text1 = project.Variables["test"].Value.Replace("\\n", "\n");

project.Variables["test"].Value - \n хранится как два отдельных символа: обратный слэш (\, код 92) и буква n (код 110).
Поэтому строка интерпретируется как 79,110,101,92,110,92,110,84,... — потому что каждый \n не становится символом новой строки, а остается буквально символами \ и n.
 
  • Спасибо
Реакции: 404

404

Client
Регистрация
23.09.2011
Сообщения
116
Благодарностей
62
Баллы
28
Я так и понял, что в переменной перенос строки экранируется. Спасибо
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)