2017-10-17 4 views
0

데이터 통합에 사용되는 유틸리티가 있는데 "Ã"와 같은 특수 문자를 사용하면 문제가 발생합니다. 아래는 문제가 발생한 문제의 방법입니다. 응답은 API에서 가져온 것으로 xml 형식입니다.HTTPGet 유니 코드 문자가 응답 문자열에 나타납니다.

protected String getStringHttpContent(URI url, Map<String,String> headerParameters) throws IOException 
    { 
     HttpGet request = new HttpGet(url); 
    for(String parameter : headerParameters.keySet()) 
      request.setHeader(parameter, headerParameters.get(parameter)); 

     CloseableHttpResponse response = getClient().execute(request); 
     dumpHeaders(response); 
     BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8")); 
     StringBuffer sb = new StringBuffer(); 
     String output; 
     while ((output = br.readLine()) != null) { 
      sb.append(output); 
     } 
    response.close(); 
     return sb.toString(); 

    } 

응답 문자열의 nj_mientill 결과는 njämientill입니다. 인코딩 변경 시도했지만 결과가 동일하게 유지됩니다. 어떤 조언을 주시면 감사하겠습니다.

+0

원격 파티가 응답 헤더를 통해 어떤 문자 인코딩 (있는 경우)을 확인 했습니까? – CBroe

+0

예, 인코딩이 gzip으로 전달됩니다. gzip에 적절한 헤더를 추가하여이 문제를 설명하려고 시도했지만 결과는 동일하게 유지됩니다. – Filiper

답변

0

전체 체인을 통해 UTF-8 인코딩을 사용하고 있는지 확인하십시오. 여기에는 HTML 양식 (예 : 페이지), 웹 서비스 (web.xml, sun-web.xml 등)에서 UTF-8을 설정하면 웹 페이지 및 사용자 입력이 포함됩니다. 또한 인바운드 HttpRequest는 "charset"헤더 속성을 포함해야합니다. "Content-Type : text/html; charset = utf-8". 귀하의 서버 측 및 클라이언트 측 구성 방법이 귀하가 사용하는 기술에 따라 결정되는 방식입니다 (모름).

편집 : 귀하의 코멘트에 대해 클라이언트 경우에도 당신은 당신이 (이이 같은 서로 다른 콘텐츠를 제공 할 수 있으므로 서버에서 기대하는 내용의 유형을 정의하는 콘텐츠 형식을 설정해야 URL). (서버가 매우 오래된 경우)

request.setHeader(HttpHeaders.CONTENT_TYPE, "application/xml; charset=utf-8"); 

나 :

으로 HttpGet을 구성 해보세요

request.setHeader(HttpHeaders.CONTENT_TYPE, "text/xml; charset=utf-8"); 

더 나은, 어쩌면 허용 캐릭터와 함께 동의 헤더를 지정

request.setHeader("Accept-Charset", "utf-8"); 
request.setHeader("Accept", "application/xml"); 

이러한 작업이 없으면 여기에 우편 답장을 표시하거나 할 것을 권합니다. 실제 요청 및 응답을 보려면 Wireshark 캡처, 더하기 headerParameters 맵의 내용을 나열하십시오. 그렇지 않으면 우리는 (당신의 코드의 나머지 부분이 좋을 것처럼, 내 의견으로는) 당신을 더 도울 수 없습니다.

+0

고마워, 나는 여러 번 시도했지만 결과는 동일하게 유지됩니다. 클라이언트 사이트에서 응답을 제공하는 서버에 액세스 할 수는 없지만 우편 배달부와 같은 간단한 API 가져 오기 도구를 사용하면이 문제가 발생하지 않습니다. – Filiper

+0

수정 됨. 그것이 도움이되기를 희망합니다. – bsaverino

+0

다시 한번 감사드립니다. 불행히도 응답은 변하지 않습니다. 지도와 관련하여이 요청에 대해서는 단순히 "Accept Content : application/xml"이 있습니다. 아래는 우편 배달부의 헤더 출력에서 ​​쿠키를 뺀 값입니다. 콘텐츠 인코딩 → gzip을 콘텐츠 유형 → 응용 프로그램/XML 일 → 날짜, 2017년 10월 22일 그리니치 표준시 16시 30분 0초 서버 → ServiceNow로 엄격한-운송 및 보안 → 최대 연령 = 63072000; includeSubDomains Transfer-Encoding → 청크 X-Is-Logged-In → true – Filiper