2012-01-30 14 views
29

ho annotato quanto segue nella console di Chrome:Javascript decodeURI (Component) malformati eccezione uri

decodeURIComponent('a%AFc'); 

Invece di risultante a0xAFc, ha causato un'eccezione URIError (malformati uri).

Ho sentito diverse scuse perché questo può essere possibile, ma quello che non capisco è il motivo per cui ?

La funzione decodeURIComponent() in particolare dovrebbe decodificare i dati, non verificare l'URI.

risposta

37

%AF non è un personaggio da solo, ma parte della sequenza Unicode (MACRON - %C2%AF).

%AF non è stato prodotto da encodeURIComponent ma qualcosa di simile escape, quindi è in grado di decodificare unescape.

Quello che probabilmente serve è decodeURIComponent('%C2%AF')

+2

ho fatta dopo ho provato la decodifica un carico di testo codificato, fallito e ho notato che sarebbe soffocare su quel particolare personaggio. Forse "unescape" è ciò di cui ho bisogno. – Christian

+1

@ChristianSciberras 'encodeURIComponent()' di solito è una scelta migliore perché funziona con UTF-8. Tuttavia, '0xAF' da solo non è una sequenza di caratteri con codifica UTF-8 valida. Questo è il motivo per cui il tuo codice non funziona. Spero sia più chiaro ora. – duri

+3

Quindi, se devo gestire gli input ASCII/iso-8859-1 per cento codificati? 'unescape' è deprecato e non esiste anche' unescapeURI' – felixfbecker

Problemi correlati