Как я могу прочитать строку с проблемными модификаторами? - PullRequest
1 голос
/ 24 мая 2011

Я не могу прочитать строку вроде "D\xC3\xA9cada", Década, в Emacs.По-видимому, он пытается найти символ, соответствующий \xA9cada, действительному гексу, и не может его найти, возвращая следующую ошибку:

ELISP> "D\xC3\xA9cada"
*** Read error ***  Invalid modifier in string

Есть ли способы ограничить читателя, чтобы он нашел модификаторв первых двух символах за х или общие обходные пути?Замена '\ xA9' на '\ 251' будет работать в этом случае, но может отсутствовать в строке '\ xA9000'.

Спасибо!


РЕДАКТИРОВАТЬ: В конце концов, мне пришлось изменить программу генерации строк, чтобы учесть это.Каждая последовательность будет добавлена ​​с '\'.В рубине: puts string.gsub(/(\\x[0-9A-F][0-9A-F])([0-9A-Fa-f])/,'\1\\\\ \2')

1 Ответ

2 голосов
/ 25 мая 2011

См. Руководство Emacs Lisp :

Вы также можете представить многобайтовый не-ASCII-символ с помощью его кодового символа: используйте шестнадцатеричный escape-код, \ xnnnnnnn, с таким количеством цифр.как необходимо.(Все многобайтовые коды не ASCII-символов больше 256.) Любой символ, который не является допустимым шестнадцатеричным числом, завершает эту конструкцию.Если следующий символ в строке может быть интерпретирован как шестнадцатеричная цифра, напишите «\» (обратный слеш и пробел), чтобы завершить экранирование шестнадцатеричным символом - например, «\ x8e0 \» представляет один символ, «a» с серьезным акцентом.'\' в строковой константе похожа на обратную косую черту;он не добавляет какой-либо символ в строку, но завершает предыдущее шестнадцатеричное экранирование.
...