URLDecoder: Illegal hex characters in escape (%) pattern

Ajax 요청을 보내던 중 “URLDecoder: Illegal hex characters in escape (%) pattern” 라는 에러가 발생했다.

무슨 에러인가 하고 보니 % 과 16진수 문자열에 관한 내용인거 같다.

찾아보니 URL Decode 과정에서는 % 뒤에 오는 문자열을 16진수로 인식하는데 이 문자열이 변환이 되지 않았을때 발생하는 오류라고 한다.

URL 에서 %가 붙은 문자열을 Escape 문자열이라고 한다.

왜 Escape 문자열을 사용하는건가? 라는 질문에는 다음과 같이 간단하게 답할 수 있다.

예를들어 GET 방식으로 파라미터를 보낼 때 다음과 같이 파라미터 값에 공백 값이 하나 있다고 치자

ex) ?key=valu e

이 경우 요청을 받는 곳에서는 온전하게 “valu e” 라는 값을 받아오지 못한다. 즉 URL 에 포함된 특수한 문자들에 대해선 인식을 하지 못하는 것이다.

그래서 특수문자를 사용했다는것을 알려주어야 하는데, 이때 사용하는게 Escape 문자이다.

위 예에서 “valu e” 를 인식해주기 공백을 나타내는 Escape 문자열인 “%20” 을 공백부분에 바꿔넣는다.

ex) ?key=valu%20e

그러면 URL Decoder 에서는 자연스레 공백으로 인식할 것이다.

에러인 “%” 에 대해서도 아래 표에서 나왔듯이 “%25” 로 바꿔주면 에러가 나지 않을 것이다.

Escape 특수문자 표

공백 %20 ` %60 - %2D < %3C
[ %5B ~ %7E _ %5F > %3E
] %5D ! %21 = %3D . %2E
{ %7B @ %40 + %2B , %2C
} %7D # %23 \ %5C ? %3F
( %28 $ %24 | %7C
) %29 % %25 / %2F
^ %5E : %3A
& %26 ; %3B
* %2A ' %27
" %22

댓글남기기