Почему '\x' недопустим в Python?
Я экспериментировал с символами '\', используя '\a\b\c...' просто для того, чтобы перечислить для себя, какие символы Python интерпретирует как управляющие символы и для чего. Вот что я нашел:
\a - BELL
\b - BACKSPACE
\f - FORMFEED
\n - LINEFEED
\r - RETURN
\t - TAB
\v - VERTICAL TAB
Большинство других символов, которые я пробовал, '\ g', '\ s' и т. Д., Просто соответствуют 2-символьной строке с обратной косой чертой и заданному символу. Я понимаю, что это намеренно и имеет смысл для меня.
Но "\ х" это проблема. Когда мой сценарий достигает этой строки исходного текста:
val = "\x"
Я получил:
ValueError: invalid \x escape
Что такого особенного в "\ х"? Почему он трактуется иначе, чем другие не экранированные символы?
5 ответов
Существует таблица, в которой перечислены все escape-коды и их значения в документации.
Последовательность побега Значение Примечания \xhh Символ с шестнадцатеричным значением hh (4,5)
Заметки:
4. В отличие от стандартного C, требуется ровно две шестнадцатеричные цифры.
5. В строковом литерале шестнадцатеричное и восьмеричное экранирование обозначают байт с заданным значением; необязательно, чтобы байт кодировал символ в исходном наборе символов. В литерале Unicode эти экранирования обозначают символ Unicode с заданным значением.
x используется для определения (одного байта) шестнадцатеричных литералов в строках, например:
'\x61'
будет иметь значение "а", потому что 61 - шестнадцатеричное значение 97, которое представляет собой в ASCII
\xhh
используется для представления шестнадцатеричных escape-символов.
\x отсутствует шестнадцатеричный символ, с которым вы хотите сопоставить: \xnn -> \x1B
Вы не даете полную последовательность побега:
\ Xhh...
Шестнадцатеричное значение hh, где hh обозначает последовательность шестнадцатеричных цифр ('0' - '9' и либо 'A' - 'F', либо 'a' - 'f'). Как и та же конструкция в ISO C, escape-последовательность продолжается до тех пор, пока не будет видна первая не шестнадцатеричная цифра. (ce) Однако использование более двух шестнадцатеричных цифр приводит к неопределенным результатам. (Экранирующая последовательность '\x' не разрешена в POSIX awk.)
От: http://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences.html