Send UTF-8 chars via HttpURLConnection failing

11,862

You need to set the encoding in your Content-Type header.

Set it to "application/x-www-form-urlencoded; charset=utf-8". Currently you only set the accept-charset - this tells the server what to send back.

Share:
11,862
Martin Ho
Author by

Martin Ho

Updated on June 17, 2022

Comments

  • Martin Ho
    Martin Ho almost 2 years

    I have spent half Sunday on this now I need help:

    I want to send a String including special chars UTF-8 encoded to a server using Java HttpURLConnection. The correct encoding of the chars fails.

    Example:

    strToSend: ä ù €
    strUrlEncoded: %C3%A4+%C3%B9+%E2%82%AC
    strReceived:ä ù â¬
    

    My code:

            urlConnection = (HttpURLConnection) new URL("http://localhost:8080/NetworkingServer/ServerServlet").openConnection();
            urlConnection.setUseCaches(false);
            urlConnection.setDoOutput(true); // Triggers POST.
            urlConnection.setRequestProperty("accept-charset", "UTF-8");
            urlConnection.setRequestProperty("content-type", "application/x-www-form-urlencoded");
    
            String strToSend = "ä ù €";
            System.out.println("strToSend: " + strToSend);
            String strUrlEncoded = URLEncoder.encode(strToSend, "UTF-8");
            System.out.println("strUrlEncoded: " + strUrlEncoded);
    
            OutputStreamWriter writer = new OutputStreamWriter(urlConnection.getOutputStream(), "UTF-8");
            writer.write(String.format("content=%s", strUrlEncoded));
            writer.close();
    

    Any ideas?