2012-06-04 3 views
0

Java 서블릿을 통해 Google 지오 코딩 API에 HTTP 요청을 설정 중입니다. 유감스럽게도이 요청에 특수 문자 (예 : 'ß')가 포함될 때마다 요청에서 '잘못된 요청/400'예외가 반환됩니다. 이 서비스는이 이상한 인물이 꽤 대중적이며 필요한 곳, 즉 유럽에서 사용되기 시작하기 때문에 여기에서 약간의 문제가 있습니다. 요청에서 특수 문자를 16 진수 이스케이프 문자열 ('ß'의 경우 0xDF/% DF)으로 바꾸면 Google의 'INVALID_REQUEST'응답이 반환됩니다. 특수 문자가있는 Java HTTP/XML 요청

stringToReverse = URLEncoder.encode(url, "UTF-8"); 
URL urlR = new URL(url); 
       URLConnection connection = urlR.openConnection(); 

       connection.setDoOutput(true); 

       OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream()); 
       out.write("string=" + stringToReverse); 
       out.close(); 

       BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
       String decodedString; 
       String resultString = ""; 
       while ((decodedString = in.readLine()) != null) { 
        System.out.println(decodedString); 
        resultString += decodedString; 
       }    
       in.close(); 

이 희망 someome 여기 좀 도와 수 있습니다

이것은 내가 XML 응답을 얻는 방법이다. URLConnection이나 스트림 중 하나를 UTF-8로 설정해야한다고 가정합니다. Google의 응답이 UTF-8로 인코딩 된 것으로 간주할까요?!

답변

0

대신 사용 InputStreamReaderconstructor :

BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); 

또한 OutputStreamWriterconstructor을 사용 :

OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8")); 

희망이 당신의 문제를 해결!

+0

감사합니다. 슬프게도 요청은 여전히 ​​"400"응답으로 실패합니다. 그런데 브라우저를 통해 요청을 직접 입력하는 경우 (이스케이프되지 않은 특수 문자 사용) 올바른 결과를 얻을 수 있습니다. –

+0

'outputStream'에 쓰고있는'stringToReverse'의 예를 들어 주시겠습니까? – HashimR

관련 문제