2017-01-16 2 views
0

Webharvest를 사용하여 웹 사이트에서 파일을 다운로드하고 원래 이름을 사용합니다. 내가 함께 일하고Java에서 인코딩 헤더 문제 받기

자바 코드는 다음과 같습니다

import org.apache.commons.httpclient.Header; 
      import org.apache.commons.httpclient.HttpClient; 
      import org.apache.commons.httpclient.HttpStatus; 
      import org.apache.commons.httpclient.Header; 
      import org.apache.commons.httpclient.methods.GetMethod; 

      HttpClient client = new HttpClient(); 

      BufferedReader br = null; 
      StringBuffer result = new StringBuffer(); 
      String attachName; 

      GetMethod method = new GetMethod(attachmentLink.toString()); 

      int returnCode; 
      returnCode = client.executeMethod(method); 
      Header[] headers = method.getResponseHeader("Content-Disposition"); 
      attachName = headers[0].getValue(); 
      attachName = new String(attachName.getBytes()); 

webharvest의 결과는 다음과 같습니다

첨부; 파일 이름 = "Resolucin sobre 암석 드 Contratacin.pdf"

내가 헤더 내용의 값을 가지고 후에는 편지

ó

을 만들어 질수 변수 attachName에 -Disposition, 나는 또한 그것을 해독하려고하지만 운 :

String attachNamef = URLEncoder.encode(attachName, "ISO-8859-1"); 
         attachNamef = URLEncoder.decode(attachNamef, "UTF-8"); 

나는 DETE 할 수 있었다 응답 문자셋은 다음과 같습니다. ISO-8859-1

method.getResponseCharSet() 

P.S. 파이어 폭스 파이어 버그에서 헤더를 볼 때 값은 정상입니다. 내용 - 처리

첨부 파일; 파일 이름 = "Resolución sobre Mesas de Contratación.pdf"

+0

응답 문자 집합은 헤더 필드가 아니라 페이로드를 참조합니다. 또한 HTTP 구성 요소의 매우 오래된 버전을 사용하고있는 것 같습니다. 마지막으로 서버 응답이 유효하지 않습니다. 비 ASCII 문자는 여기에 허용되지 않습니다. RFC 6266을 참조하십시오. –

답변

2

Apache HttpClient는 HTTP 헤더에서 비 ASCII 문자를 지원하지 않습니다. Taken from documentation :

HTTP 요청 또는 응답의 헤더는 US-ASCII 형식이어야합니다. 요청이나 응답의 헤더에 비 US-ASCII 문자를 사용할 수 없습니다. 그러나 HTTP 헤더는 실제로 데이터 자체를 전송하는 것이 아니라 데이터 전송을 처리하도록 설계되었으므로 일반적으로 이것은 문제가되지 않습니다. 그러나 한 가지 예외는 쿠키입니다. 쿠키는 HTTP 헤더로 전송되기 때문에 US-ASCII 문자 세트로 제한됩니다. 자세한 내용은 쿠키 가이드를 참조하십시오.