2012-07-26 2 views
1

누군가가 통찰력을 가지고 있을지도 모른다는 궁금한 점이 있습니다. 특정 시점에서특정 문자의 수수께끼 내 URL 디코딩 - Android URI/Google App Engine

uri = new URI(request); 

:

request = REQUEST_BASE + "?action=loadauthor&author=" + URLEncoder.encode(author, "UTF-8"); 

나는 다음과 같은 URI를 문자열에 몇 가지 다른 매개 변수를 추가하고 생성 : 나는 다음과 같은 코드를 사용하여 안드로이드에 URL에 쿼리 문자열을 인코딩

:

uri.getRawQuery().getBytes(); 

가 그럼 난과 함께 그것의 방법에 보내 : 나는 체크섬을 확인하기 위해 쿼리 문자열을 당겨 AppEngine에 서버에서

, 나는 다음 문자열을 검색하고 체크섬과 일치하려고 :

String query = req.getQueryString(); 

일반적으로, 이것은 잘 작동합니다. 그러나 서버로가는 도중 인코딩되지 않은 문자가 몇 가지 있습니다.

을 : 예를 들어,

행동 = loadauthor & 저자 = 찰스 + 알렉산더 + % 28Ohiyesa의 % 29 + 이스트만 & 타임 스탬프 = 1343261225838 & 사용자 = 1,479,845,600

는 다음과 같이 서버 로그에 표시 (와 GAE 응용 프로그램에서)

행동 = loadauthor & 저자 = 찰스 + 알렉산더 + (Ohiyesa) + 이스트만 & 타임 스탬프 = 1343261226837 & 사용자 = 1,479,845,600

이는 사장님 (몇 자 발생 괄호). 다른 문자는 계속 인코딩됩니다. 누구든지 내가 잘못하고있는 것에 대해 생각하고 있습니까? 모든 의견을 보내 주시면 감사하겠습니다.

답변

0

이 문제에 대한 해결책을 찾지 못했습니다. 나는 서버에 물건을 보내기 전에 클라이언트에서 특정 문자를 비 암호화하여 주위에 일 : 사람이 더 나은 솔루션을

request = request.replace("%28", "("); 
request = request.replace("%29", ")"); 
request = request.replace("%27", "'"); 

경우, 내가 (다른 사람이) 관심이 될 것이라고 확신합니다!

0

URLEncoder는 대부분의 서버에서 "안전한"것으로 간주되므로 괄호와 특정 문자를 인코딩하지 않습니다. URLEncoder을 참조하십시오. 필요한 경우 스스로 교체해야합니다.

예 :

URI uri = new URI(request.replace("(","%28")); 

교체를 많이 필요로하는 경우 request.replaceAll (문자열으로 RegularExpression, 문자열 교체)을 시도 할 수 있습니다. 물론 정규 표현식에 대한 지식이 필요합니다.

+0

문제는 ** ** 인코딩 괄호입니다. (그런 다음 어딘가에 해독 당한다.) 그렇지 않다면 나는 아주 행복 할 것이다. 나는 일반적인 java.net.URLEncoder를 사용하고있다. 그러나 이것이 예상 된 행동이라고 생각합니다. [doc] (http://developer.android.com/reference/java/net/URLEncoder.html)에는 '글자를 제외한 모든 문자 ('a '..'z ','A '..'Z '), 숫자 ('0'.. '9') 및 문자 '.', '-', '*', '_'는 '%'가 앞에 붙는 16 진수 값으로 변환됩니다. 예 : '#'-> % 23. 또한 공백은 '+'로 대체됩니다. ' – Tad