замена строки на escape-символы - PullRequest
9 голосов
/ 11 декабря 2008

Сегодня я обнаружил, что размещение строк в файле ресурсов приведет к тому, что они будут рассматриваться как литералы, т. Е. Добавление «Текст для первой строки \ n Текст для второй строки» приведет к экранированию самого escape-символа, и так сохранено «Текст для первой строки \ n Текст для второй строки» - и затем они появляются на дисплее вместо моих возвратов каретки и вкладок

Итак, я хотел бы использовать string.replace, чтобы превратить \\ в \ - похоже, это не сработает.

s.Replace("\\\\", "\\"); 

не изменяет строку вообще, потому что строка считает, что есть только 1 обратный слеш

s.Replace("\\", "");

заменяет все двойные кавычки и оставляет мне просто n вместо \ n

также, использование @ и вдвое меньше \ символов или Regex.Replace метод дают тот же результат

кто-нибудь знает хороший способ сделать это без циклического прохождения символа за символом?

Ответы [ 3 ]

14 голосов
/ 11 декабря 2008

Поскольку \n на самом деле является одним символом, вы не можете получить это, просто заменив обратную косую черту в строке. Вам нужно будет заменить каждую пару \ и следующий символ на экранированный, например:

s.Replace("\\n", "\n");
s.Replace("\\t", "\t");
etc
8 голосов
/ 11 декабря 2008

Вам лучше будет настроить сами файлы resx. Разрывы строк можно вводить с помощью двух механизмов: вы можете редактировать файл resx как XML (щелкните правой кнопкой мыши в обозревателе решений, выберите «Открыть как» и выберите XML) или вы можете сделать это в конструкторе.

Если вы сделаете это в XML, просто нажмите Enter, возвратитесь в начало новой строки, которую вы создали, и все готово. Вы также можете сделать это с помощью функции поиска и замены, хотя это будет сложно.

Если вы используете редактор GUI resx, удерживая нажатой клавишу SHIFT при нажатой клавише ENTER, вы получите разрыв строки.

Вы могли бы сделать замену во время выполнения, но, как вы обнаруживаете, это сложно начать - и, на мой взгляд, представляет собой запах кода. (Вы также можете указать аргумент производительности, но это будет зависеть от того, как часто вызываются строковые ресурсы и от масштаба вашего приложения в целом.)

0 голосов
/ 11 декабря 2008

Я на самом деле иду с решением Джона и редактирую XML напрямую, поскольку это лучшее решение для проекта, но codelogic ответил на вопрос, который сводил меня с ума.

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