Проблема кодирования / получения параметра URL - PullRequest
1 голос
/ 03 октября 2009

Я использую приведенный ниже код для отправки данных сервлету: Когда кодировка = "UTF-8" или "GBK", данные принимаются правильно. Но когда кодировка = "UTF-16", получатель получает ноль. ПОЧЕМУ ??

Отправитель:

    URL url = new URL(notifyURL);
    HttpURLConnection connection = (HttpURLConnection)url.openConnection();
    connection.setDoOutput(true);
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=" + encoding);        
    OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
    out.write("notify_id=" + URLEncoder.encode("123", encoding) + "&notify_type=" + URLEncoder.encode("any", encoding));
    out.flush();
    out.close();
    connection.connect();

Получатель сервлета:

            log.info(request.getParameter("notify_type"));    //print null

Ответы [ 2 ]

1 голос
/ 03 октября 2009

Согласно Javadocs для URLEncoder , вы должны использовать только UTF-8, потому что другие кодировки могут вызвать проблемы. Они напрямую связаны со спецификацией W3C из Javadocs.

1 голос
/ 03 октября 2009

У вас 2 вопроса,

  1. UTF-16 не поддерживается многими веб-серверами. Некоторые URLDecoder могут обрабатывать только однобайтовую кодировку (ASCII, Latin-1) и UTF-8.
  2. Вы используете смешанную кодировку, если кодировкой по умолчанию не является UTF-16. UTF-8 и GBK оба совместимы с ASCII (ASCII кодируется как сам по себе), поэтому вы можете смешивать с ASCII, но вы не можете сделать это с UTF-16.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...