@@ -270,18 +270,19 @@ private static boolean isFormPost(HttpServletRequest request) {
270
270
*/
271
271
private InputStream getBodyFromServletRequestParameters (HttpServletRequest request ) throws IOException {
272
272
ByteArrayOutputStream bos = new ByteArrayOutputStream (1024 );
273
- Writer writer = new OutputStreamWriter (bos , FORM_CHARSET );
273
+ Charset charset = getFormCharset ();
274
+ Writer writer = new OutputStreamWriter (bos , charset );
274
275
275
276
Map <String , String []> form = request .getParameterMap ();
276
277
for (Iterator <Map .Entry <String , String []>> entryItr = form .entrySet ().iterator (); entryItr .hasNext ();) {
277
278
Map .Entry <String , String []> entry = entryItr .next ();
278
279
List <String > values = Arrays .asList (entry .getValue ());
279
280
for (Iterator <String > valueItr = values .iterator (); valueItr .hasNext ();) {
280
281
String value = valueItr .next ();
281
- writer .write (URLEncoder .encode (entry .getKey (), FORM_CHARSET ));
282
+ writer .write (URLEncoder .encode (entry .getKey (), charset ));
282
283
if (value != null ) {
283
284
writer .write ('=' );
284
- writer .write (URLEncoder .encode (value , FORM_CHARSET ));
285
+ writer .write (URLEncoder .encode (value , charset ));
285
286
if (valueItr .hasNext ()) {
286
287
writer .write ('&' );
287
288
}
@@ -301,6 +302,19 @@ private InputStream getBodyFromServletRequestParameters(HttpServletRequest reque
301
302
return new ByteArrayInputStream (bytes );
302
303
}
303
304
305
+ private Charset getFormCharset () {
306
+ try {
307
+ MediaType contentType = getHeaders ().getContentType ();
308
+ if (contentType != null && contentType .getCharset () != null ) {
309
+ return contentType .getCharset ();
310
+ }
311
+ }
312
+ catch (Exception ex ) {
313
+ // ignore
314
+ }
315
+ return FORM_CHARSET ;
316
+ }
317
+
304
318
305
319
private final class AttributesMap extends AbstractMap <String , Object > {
306
320
0 commit comments