2016-10-28 2 views
0

저는 자바에서 백엔드로 안드로이드 애플 리케이션을 개발 중이며 Http Post를 통해 통신하고 있습니다. 영어 이외의 문자가 포함 된 요청을 보내면 백엔드에서 제대로 처리되지만 백엔드가 영어 이외의 문자를 반환하려고하면 '?'로 수신됩니다. 내가 parmas "STR=שלום עולם" (히브리어 문자)Http Post에서 UTF-8 응답 수신

백엔드 샘플 서블릿으로 보내고있다 말 :

public class DebugServlet extends HttpServlet { 
    @Override 
    public void doPost(HttpServletRequest req, HttpServletResponse resp) 
     throws IOException { 

     String param = req.getParameter("STR"); 

     log(param); //Prints שלום עולם, So receiving fine! 

     try(PrintWriter out = resp.getWriter()) { 
      out.print(param); 
     } 
    } 
} 

클라이언트 코드 :

private final static String CHARSET = "UTF-8"; 
public static void send(String server, String servletName, Map<String, String> params){ 
    try{ 
     URL url = new URL(server + servletName); 
     URLConnection connection = url.openConnection(); 

     HttpURLConnection conn = (HttpURLConnection) connection; 

     OutputStream os; 

     conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); 
     conn.setRequestMethod("POST"); 
     conn.setUseCaches(false); 
     conn.setDoInput(true); 
     conn.setDoOutput(true); 
     os = conn.getOutputStream(); 

     //Add parameters 
     BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, CHARSET)); 
     StringBuilder paramsSB = new StringBuilder(); 
     boolean isFirst = true; 
     for(Map.Entry<String,String> entry : params.entrySet()){ 
      if(isFirst) 
       isFirst = false; 
      else 
       paramsSB.append("&"); 
      paramsSB.append(URLEncoder.encode(entry.getKey(), CHARSET)); 
      paramsSB.append("="); 
      paramsSB.append(URLEncoder.encode(entry.getValue(), CHARSET)); 
     } 

     writer.append(paramsSB.toString()); 

     writer.flush(); 
     writer.close(); 
     os.close(); 

     int responseCode; 
     responseCode = conn.getResponseCode(); 

     if (responseCode != 200) 
      throw new RuntimeException("..."); 

     StringBuilder chain = new StringBuilder(""); 
     try(BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()))) { 
      String line = ""; 
      while ((line = rd.readLine()) != null) { 
       chain.append(line); 
      } 
     } 

     Log.d("MyTAG", chain.toString()); //Prints "???? ????", that's the problem 
    } catch (IOException e) { 
     // writing exception to log 
     throw new RuntimeException("..."); 
    } 
} 

감사합니다 :) 당신은 응답을 설정해야

답변

2

HttpServletResponse 용 UTF-8 인코딩 기본 인코딩은 ISO_8859_1

// response.setContentType("text/plain"); 
    response.setCharacterEncoding("UTF-8"; 

    // Write utf-8 strings 
입니다.
관련 문제