How to encode cyrillic symbols in HTTP-requests in Java?

我怕爱的太早我们不能终老 提交于 2021-02-07 15:49:10

问题


Good time! My Adroid app executes HTTP request to the one of the API services of Google. Sure, it works, when the parameter of the request in english, but when I test my function with cyrillic - I get the 400-error. Seems to be, the problem is to encode the Win-1251 string to UTF-8 ?How it can be done in Java ?


回答1:


Try:

URLEncoder.encode(yourString, HTTP.UTF-8);



回答2:


You should use URLEncoder#encode() to encode request parameters.

String query = "name1=" + URLEncoder.encode(value1, "UTF-8")
            + "&name2=" + URLEncoder.encode(value2, "UTF-8")
            + "&name3=" + URLEncoder.encode(value3, "UTF-8");

String url = "http://example.com?" + query;
// ...

Note that parameter names should actually also be URL-encoded, however in this particular example, they are all valid already. Also note that when you're using Android's builtin HttpClient API, you don't need to do this.




回答3:


All String objects in Java are encoded as Unicode (UTF-16) and Unicode includes characters from the Windows-1251 character set.

For example, "Česká" is "\u010Cesk\u00E1".

If you want to send this string to other software using a different character set then you need to convert the string to bytes in that character set using class CharsetEncoder, or using class OutputStreamWriter and passing the Charset.

And if you receive a string from other software in a different character set then use class CharsetDecoder or InputStreamReader with the Charset to convert it to back Unicode.




回答4:


Update on depricated parameter:

import static java.nio.charset.StandardCharsets.UTF_8;

String pathEncoded = "";

try {

  pathEncoded = URLEncoder.encode(path, UTF_8.toString());

} catch (UnsupportedEncodingException e) {

  e.printStackTrace();
}


来源:https://stackoverflow.com/questions/7295302/how-to-encode-cyrillic-symbols-in-http-requests-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!