There is the following Java code:
public static void register(UserInfo info) throws ClientProtocolException, IOException, JSONException, RegistrationException {
List<NameValuePair> params=new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("name", info.getName()));
params.add(new BasicNameValuePair("email", info.getEmail()));
params.add(new BasicNameValuePair("pass", info.getPassword()));
params.add(new BasicNameValuePair("genus", String.valueOf(info.getGenus())));
String response=doPostRequest(params, REGISTRATION_URL);
}
private static String doPostRequest(List<NameValuePair> params, String url) throws ClientProtocolException, IOException {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
httppost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse response = httpclient.execute(httppost);
return getContentFromInputStream(response.getEntity().getContent());
}
private static String getContentFromInputStream(InputStream is) throws IOException {
String line;
StringBuilder sb=new StringBuilder();
BufferedReader reader=new BufferedReader(new InputStreamReader(is));
while((line=reader.readLine())!=null) {
sb.append(line);
}
reader.close();
return sb.toString();
}
As you can see above, I send POST request and get response. But in register method I use russian name (cyrillic), and there is "????? ???" on my server. How can I fix it? How can I encode russian text?
You need to set your request encoding to UTF-8.
From: http://hc.apache.org/httpclient-3.x/charencodings.html
An example of how this is accomplished:
Additionally, I see your using
UrlEncodedFormEntity
. You should add encoding to the constructor as so:If you tired of searching for correct headers / encoding combinations, you can encode string to URI format and decode back, this will preserve any non-ascii chars
httpclient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
you should try encoding parameters
If you post as json:
Perhaps you are reading or writing the response wrong?
Make sure you use the same encoding in both writing the request and reading it and in the post http headers.
To define encoding for read data use InputStreamReader(InputStream, Charset) constructor.