Отправка нелатинской строки запроса в URL в JavaME - PullRequest
1 голос
/ 18 июня 2010

Я хочу сделать запрос HTTP GET из моего приложения J2ME, используя класс HttpConnection.Проблема в том, что я не могу отправить русский текст в строке запроса.Вот пример того, как я отправляю запрос

c = (HttpConnection)Connector.open("http://127.0.0.1:1418/zp.ashx?тест");
InputStream s = c.openInputStream();

Принимающий скрипт asp.net получает часть запроса в виде URL в виде% 3f% 3f% 3f% 3f

это 4 одинаковых кода.Определенно это не то, что я отправляю

Так как я могу отправить нелатинский текст в запросе http в J2ME?

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 18 июня 2010

URL может содержать только символы ASCII и несколько символов пунктуации. Для других символов вы должны% -кодировать их перед добавлением в URL. Используйте URLEncoder.encode("тест", enc), где параметр enc - это схема кодирования, которую сервер ожидает .

1 голос
/ 19 июня 2010

Ваш код

Connector.open("http://127.0.0.1:1418/zp.ashx?тест");

обрабатывается java.nio.CharsetDecoder для набора символов ASCII, и этот декодер заменяет все неизвестные символы его заменой .

Чтобы получить желаемое поведение, вы должны закодировать URL перед его отправкой.Например, когда ваш сервер ожидает, что URL-адреса будут в кодировке UTF8:

String encodedParameter = URLEncoder.encode("тест", "UTF-8");
Connector.open("http://127.0.0.1:1418/zp.ashx?" + encodedParameter);

Обратите внимание, что если у вас несколько параметров, вам необходимо кодировать как имена параметров, так и значения параметров по отдельности, прежде чем объединять их вместес "=" и объединяя их с "&".Если вам нужно кодировать несколько параметров, этот класс может быть вам полезен:

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class UrlParamGenerator {
  private final String encoding;
  private final StringBuilder sb = new StringBuilder();
  private String separator = "?";

  public UrlParamGenerator(String charset) {
    this.encoding = charset;
  }

  public void add(String key, String value) throws UnsupportedEncodingException {
    sb.append(separator);
    sb.append(URLEncoder.encode(key, encoding));
    sb.append("=");
    sb.append(URLEncoder.encode(value, encoding));
    separator = "&";
  }

  @Override
  public String toString() {
    return sb.toString();
  }

  public static void main(String[] args) throws UnsupportedEncodingException {
    UrlParamGenerator gen = new UrlParamGenerator("UTF-8");
    gen.add("test", "\u0442\u0435\u0441\u0442");
    gen.add("x", "0");
    System.out.println(gen.toString());
  }
}
1 голос
/ 18 июня 2010

Возможно, вам потребуется явно установить набор символов в заголовке HTTP, который поддерживает кириллицу.Вы можете использовать UTF-8 или другую кодировку, такую ​​как windows-1251 (хотя UTF-8 должен быть предпочтительным выбором).

c.setRequestProperty("Content-type", "application/x-www-form-urlencoded;charset=utf-8");    
c = (HttpConnection)Connector.open("http://127.0.0.1:1418/zp.ashx?тест");

Если вы используете соответствующий набор символов, сервер должен иметь возможность правильно обрабатывать параметр запроса кириллицы - при условии, что он также поддерживает этот набор символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...