2016-10-28 13 views
0

私はJavaでバックエンド付きのアンドロイドアプリを開発しており、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 
です
関連する問題