Search code examples
javacharacter-encodingapache-httpclient-4.xurlencodecjk

Send UrlEncodedForm data using euc-jp in Apache HttpClient


I am wondering how I can send form data using euc-jp encoding. My attempt at encoding below is still sending japanese text as ? and odd characters. Thank you!

This is how I am currently doing it (not working properly):

HttpPost request = new HttpPost("http://httpbin.org/post");
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("Testing", "雄大"));
request.setEntity(new UrlEncodedFormEntity(params, forName("EUC-JP")));

Solution

  • Your code seems good to me. httpbin.org doesn't seem to be handle EUC-JP in response. Instead you can use putsreq.com to see your request parameters.

    import java.util.*;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.client.methods.*;
    import org.apache.http.NameValuePair;
    import java.nio.charset.*;
    import org.apache.http.impl.client.*;
    import org.apache.http.client.*;
    import org.apache.http.*;
    import java.io.*;
    
    class Main {
      public static void main(String[] args) throws Exception {
        HttpClient httpclient = new DefaultHttpClient();
        // Create new PutsReq URL by yourself
        HttpPost request = new HttpPost("https://putsreq.com/xxxxxxxxxxxxxxxxxxxx");
        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("Testing", "雄大"));
        request.setEntity(new UrlEncodedFormEntity(params, Charset.forName("euc-jp")));
        HttpResponse response = httpclient.execute(request);
        BufferedReader reader =  new BufferedReader(new InputStreamReader((response.getEntity().getContent())));
        while ((reader.readLine()) != null) {
          System.out.println (reader.readLine());
        }
        reader.close();
      }
    }
    

    And you will see

    Testing=%CD%BA%C2%E7
    

    in the inspect page. 0xCDBA means in EUC-JP.