2011-12-27 2 views
1

참조 : Getting an ajax response in java from a web method (java.io.FileNotFoundException)HTTP POST 요청 기관 다르게 인코딩 (문자 집합) 앞의 질문에

내가 요청 본문에 POST 요청에 포함 된 JSON을 보내려고하지만 웹 브라우저에서 그 일을 할 때 몸이 다르게 인코딩 (크롬) 및 내 Java 코드. link는 (제 좋은 하나이며, 두 번째는 잘못 인코딩 자바 요청이다) : 여기

String params = "{\"prefixText\":\"aCity\",\"count\":10,\"contextKey\":\"he\"}"; 
conn = (HttpURLConnection) new URL("http://bus.gov.il/WebForms/wfrmMain.aspx/GetCompletionList").openConnection(); 
conn.setDoOutput(true); 
conn.setRequestMethod("POST"); 
conn.setFixedLengthStreamingMode(params.length()); 
conn.addRequestProperty("Content-Type", "application/json; charset=UTF-8"); 
conn.addRequestProperty("Referer", "http://bus.gov.il/WebForms/wfrmMain.aspx?width=1024&company=1&language=he&state="); 
Writer out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream())); 
out.write(params); 
out.close(); 
String answer = readStream(conn.getInputStream(), "utf-8"); 

는 와이어 샤크 된 바와 같이 전송 된 요청이있다 : 여기에 내 코드이다.

Content-Type에서 charset을 변경해 보았지만 아무런 변화가 없었습니다.

도움이 될 것입니다. 여기

답변

1

, 당신은 당신의 시스템의 기본 문자 인코딩을 사용하고 있습니다 :

Writer out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream())); 

을 대신 OutputStreamWriter의 생성자 호출에 명시 적으로 인코딩을 지정

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

을 (당신은하지 않습니다 여기에 BufferedWriter이 필요합니다. 어떤 좋은 일도하지 않습니다.)

편집 : 이제 콘텐츠 길이를 i으로 설정하면 문제가 발생합니다. ncorrectly.

byte[] data = params.getBytes("UTF-8"); 
conn.setFixedLengthStreamingMode(data.length); 
... 
OutputStream output = conn.getOutputStream(); 
// Note: you should use a finally block here 
output.write(data); 
+0

감사합니다,하지만 지금은 모든 스트림에 기록하지 않습니다 :이 같은하면 바이너리 텍스트로 변환합니다. 'java.io.IOException : too many bytes written '이라고 말합니다. – RonLut

+0

@RonLut : 맞습니다. 인코딩 된 문자열의 길이 대신 * 문자 * 길이의 문자열을 길이로 사용했기 때문입니다. 바이트 *. 편집 할 것입니다. –

+0

NVM, 당신이 게시하기 몇 분 전에 나 혼자서. 변경된 :'conn.setChunkedStreamingMode (0);'그리고 이제는 작동합니다. 다시 한번 감사드립니다 :) – RonLut