2010-04-24 19 views
22

Eksperymentowałem ze znakami "\", używając "\ a \ b \ c ...", aby wyliczyć sobie, które znaki Python interpretuje jako znaki kontrolne i do czego. Oto co znalazłem:Dlaczego " x" jest nieprawidłowy w Pythonie?

\a - BELL 
\b - BACKSPACE 
\f - FORMFEED 
\n - LINEFEED 
\r - RETURN 
\t - TAB 
\v - VERTICAL TAB 

Większość innych znaków próbowałem, „\ g”, „\ s”, itd. Po prostu ocenić na ciąg 2-charakter backslashem i danego znaku. Rozumiem, że jest to celowe i ma dla mnie sens.

Ale "\ x" jest problemem. Kiedy mój skrypt osiągnie ten wiersz źródło:

val = "\x" 

uzyskać:

ValueError: invalid \x escape 

Co jest takiego specjalnego '\ x'? Dlaczego jest traktowany inaczej niż pozostałe znaki bez znaku?

Odpowiedz

20

Istnieje tabela wymieniając wszystkie kody ucieczki i ich znaczenia w documentation.

 
Escape Sequence Meaning      Notes 
\xhh    Character with hex value hh (4,5) 

Uwagi:

4. W przeciwieństwie do standardowej C, wymagane są dokładnie dwie cyfry hex.
5. W ciągu znaków literowych, szesnastkowych i ósemkowych oznaczono bajt o podanej wartości; nie jest konieczne, aby bajt kodował znak w źródłowym zestawie znaków. W literaturze Unicode te znaki oznaczają znak Unicode o podanej wartości.

+0

Ooof! Oczywiście dzięki! – PaulMcG

4

\ x brakuje charakteru hex chcesz dopasować przeciwko: \ Xnn -> \ x1B

5

X jest używany do określenia (jeden bajt) literały szesnastkowe w łańcuchach, na przykład:

'\x61' 

oceni się „a”, ponieważ 61 jest wartością szesnastkowy 97, który przedstawia w kodzie ASCII

1

nie dajemy pełną sekwencję ucieczki:

\ xhh ...

HH wartość szesnastkowa, trakt re hh oznacza sekwencję cyfr szesnastkowych ("0" - "9" i "A" - "F" lub "a" - "f"). Podobnie jak w przypadku tego samego konstruktu w ISO C, sekwencja specjalna jest kontynuowana aż do pojawienia się pierwszej nieheksadecymalnej cyfry . (c.e.) Jednak użycie więcej niż dwóch cyfr heksadecymalnych daje nieokreślone wyniki. (The „\ x” uciec sekwencja nie jest dozwolona w POSIX awk.)

Od: http://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences.html