Мне нужно включить / & в строку ZPL, чтобы разбить длинную строку на этикетке.
Существует сообщение stackoverflow, который предлагает множество методов, но, похоже, не отвечает на мой вопрос:
Вот моя проблема:
>>"asdf & asdf".gsub("&", "\\\\&")
=>"asdf \\& asdf"
Да, если я вставлю строку, она вернет то, что я хочу:
>>puts "asdf & asdf".gsub("&", "\\\\&")
=>asdf \& asdf
Но мне нужно, чтобы фактическая строка равнялась asdf \& asdf
Я пробовал проверить:
>>"asdf & asdf".gsub("&", "\\\\&").inspect
=>"\"asdf \\\\& asdf\""
>>"asdf & asdf".gsub("&", "\&").inspect
=>"\"asdf & asdf\""
Но это также не возвращает то, что мне нужно. Может быть, мне не хватает какой-то комбинации, которая вернет \ & в строке?
Спасибо
Кажется, что OP путается между внутренней строкой и тем, что выводится на терминал, который вы видите (или слышите, если вы используете аудиальный терминал). Комментарий @CarySwoveland хорош. Краткая форма - "asdf \\& asdf".codepoints
Исправление к моему комментарию выше: пока что строка содержит экранированные двойные кавычки (которые являются просто двойными кавычками), за которыми следуют пять символов .size
.
Когда вы видите, что Ruby показывает что-то вроде:
"asdf \\& asdf"
Он разбит на токены \\
(обратная косая черта) и &
(амперсанд), где первая обратная косая черта является особой, а вторая - фактическим символом. Вы можете прочитать это как «обратная косая черта буквальный».
При печати вы видите настоящую строку. Это правильно.
Внутри двойных обратных косых черт на самом деле нет, это просто следствие того, как должны обрабатываться строки, заключенные в двойные кавычки.
Это сделано для того, чтобы \n
и \r
и другие управляющие символы работали, но вы также можете использовать обратную косую черту. Есть большая разница между \n
(новая строка) и \\n
(буквальный обратная косая черта, буква n).
Вы часто будете видеть это при работе с форматами данных, содержащими специальные символы. Например, в форматерах стиля printf
значение %
имеет значение, поэтому для печати настоящего %
вам необходимо его удвоить:
'%.1f%%' % 10.3
#=> "10.3%"
У каждого формата есть свои особенности и проблемы. HTML не рассматривает обратную косую черту как особую, но он обрабатывает <
, >
и &
, поэтому вы увидите &
вместо амперсанда.
Хороший ответ. Другими словами, "\\"
представляет собой одну обратную косую черту, хотя вы видите две. Точно так же, как "\n"
представляет собой новую строку, хотя вы не видите символ новой строки.
Попробуйте это:
str = "asdf \\& asdf"; str.chars #=> ["a", "s", "d", "f", " ", "\\", "&", " ", "a", "s", "d", "f"]; str.size #=> 12; str.each_char.map(&:ord) #=> [97, 115, 100, 102, 32, 92, 38, 32, 97, 115, 100, 102]
. Мы видим, что"\\".ord #=> 92
. При просмотре любого Таблица ASCII мы видим, что символ со значением ASCII 92 является обратной косой чертой. Если бы мы написали"\".size
, Ruby терпеливо ждал бы закрывающих двойных кавычек. Пока что строка содержит единственный символ, экранированную двойную кавычку, которая является просто двойной кавычкой.