How to encode cyrillic symbols in HTTP-requests in Java?
Solution 1
Try:
URLEncoder.encode(yourString, HTTP.UTF-8);
Solution 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.
Solution 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.
Related videos on Youtube
Eugene Shmorgun
Updated on June 05, 2022Comments
-
Eugene Shmorgun almost 2 years
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 ?
-
Eugene Shmorgun over 12 yearsYeh, thanks for details, especially about Android's HttpClient
-
Artem over 7 yearsDeprecatad( UTF-8
-
Filomat about 6 yearsuse
URLEncoder.encode(yourString, java.nio.charset.StandardCharsets.UTF_8.toString())