2014-08-29 3 views
1

HTML과 Java를 사용하여 초보자라고 생각해보십시오. 내 문제를 엿보고 제안 할 수 있다면 고맙겠습니다. 나는 기본적으로 다음 순서로 다음을 시도하고있다 :HTML 결과가 인코딩 됨

을 통해 1) 클래스를 사용하여 자바로 HTTP 요청을 보낸다.

2) 결과 가져 오기. 내가받을 결과는 HTML 형식

3) 실제 결과는 ", ;, : 등 모든 따옴표가 결과에 엔티티 (& quot)로 변환됩니다 (htmlOutput 문자열)

내가 가진 질문은 같은 문자가 포함에 다음과 같은. 인코딩 된 결과를 가져 오지 않으려면 어떻게해야합니까? 엔티티 (& quot)를 포함하지 않는 원래 문자열로 결과를 얻는 좋은 방법이 있습니까? 다음은 내가 사용하는 코드입니다.

 int statusCode = HttpStatus.SC_OK; 
     String scriptOutput = ""; 
     PostMethod runnerMethod = new PostMethod(url); 
     try { 
      runnerMethod.setRequestHeader("X-Forwarded-For", LOCAL_MACHINE_IP); 
      runnerMethod.addParameter("script", serializedScript);  
      statusCode = client.executeMethod(runnerMethod); 
      if (statusCode != HttpStatus.SC_OK) { 
       scriptOutput = "HTTP Post request failed with statusCode" + statusCode + 
           runnerMethod.getStatusText(); 
       throw new Exception(scriptOutput); 
      } 
      String htmlOutput = runnerMethod.getResponseBodyAsString(); 
      scriptOutput = StringUtils.substring(htmlOutput, StringUtils.indexOf(htmlOutput,"Script:") + 8, StringUtils.indexOf(htmlOutput, "<BR/>"));    

      return scriptOutput; 
     } catch (IllegalArgumentException e) { 
      String errMsg = String.format("Error during Background script execution on instance. opId = %s, instanceUrl = %s, HTTP Status Code = %d, Err Message = %s", 
              opId, instanceUrl, statusCode, e.getMessage());   
      return errMsg;    
     } 
     catch (Exception e) 
     { 
      String errMsg = String.format("Error during Background script execution on instance. opId = %s, instanceUrl = %s, HTTP Status Code = %d, Err Message = %s", 
              opId, instanceUrl, statusCode, e.getMessage());    
return errMsg; 
     } 
     finally { 
      runnerMethod.releaseConnection(); 
     } 

출력 샘플은 다음입니다 : HTTP 서버에 게시됩니다 무엇

enter image description here

+0

"변환 된"의미가 무엇인지 설명해야합니다. 3)'htmlOutput' 변수에 HTML 엔터티 (" 등)가 없습니까? – pwes

+0

@pwes : 귀하의 제안에 대해 좀 더 명확하게 설명했습니다. 귀하의 질문에 대답하기 위해 htmlOutput에는 HTML 엔터티가 포함되어 있습니다.이 경우에는 & quot; 실제 대신 & quot; 질문이 명확한 경우 알려주십시오. – animageofmine

답변

1

. 나는 당신이 아파치 코 몬즈 HTTP 클라이언트를 사용하고 있다고 추정한다. 따옴표를 HTML 엔티티로 이스케이프 처리하는 getResponseBodyAsString() - 메소드에는 아무 것도 없습니다.

아마 두 번 JSON 인코딩 된 개체를 보내려고 했으므로 (실제로는 일반적인 표현으로 인코딩 된 다음 엔티티를 설명하는 JSON 문자열로 인코딩 된 것입니다) 서버 측에서 보았을 것입니다.

올바른 해결 방법은 이중 인코딩을 제거하는 것입니다. 서버 측을 제어하지 않으면 .replaceAll("&quot;", "\"")을 사용하거나 Apache Commons StringEscapeUtils as explained elsewhere on StackOverflow을 사용할 수 있습니다.

+0

예 결과 서버에서 JSON 문자열을 반환하고 Apache Commons HttpClient를 사용하고 있습니다. 서버에서 결과를 반환 할 때 이중 인코딩 없애 버려? BTW, 대체 모두를 사용하여 생각했지만 한 문제를 해결할뿐입니다. 대체해야하는 다른 문자가 무엇인지 확실하지 않습니다. 일반 클라이언트 결과적으로 결과에 HTML 엔터티로 변경 될 수있는 다른 문자가 포함될 수 있습니다. 제안? – animageofmine

+0

위와 같이 썼을 때 StringEscapeUtils (Apache Commons-lang의 일부 임)는 모든 HTML 엔터티를 이스케이프 처리 할 수 ​​있습니다 .. 서버에서 수행되므로 자세한 정보없이 이중 인코딩을 제거하는 방법을 조언 할 수는 없습니다. – llogiq

+0

감사합니다. 서버 쪽에서는 다음과 같이 입력하십시오. cript (javascript)가 실행되고 결과 문자열이 JSON 인코더 (https://github.com/douglascrockford/JSON-js)를 사용하여 JSON으로 인코딩됩니다. 예 : [ "key1": { "subkey1": "value1"}}, { "key2": { "subkey2": "value2"}}] – animageofmine