Какая кодировка используется AppEngine TaskQueue, когда они кодируют массивы byte [] как строки? - PullRequest
0 голосов
/ 10 марта 2011

Что такое кодировка тела HTTP POST, вызываемого из службы AppEngine TaskQueue?

Если я создаю задачу через TaskOptions#payload(byte[], String), что будет кодировать тело HTTP-запросаbe?

Аналогично, какой будет кодировка String, созданная с помощью TaskOptions#param(String, byte[]) и полученная с помощью ServletRequest#getParameter(String)?

ОБНОВЛЕНИЕ: Какое имя кодировки Я должен использовать в

req.getParameter("myParam").getBytes(charset)

, чтобы вернуть двоичные данные, которые я отправил через TaskOptions#param(String, byte[])?

Кажется, это значение по умолчанию для конкретного сервлет-контейнера, которое не определено в определении для 'application / x-www-form-urlencoded' в http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1 - потому что все, что абстрагируется вAPI сервлетов уже.

Ответы [ 2 ]

2 голосов
/ 10 марта 2011

Если я создаю задачу через TaskOptions # payload (byte [], String), какая будет кодировка HTTP тело запроса будет?

Кодировка отсутствует - передаваемый вами байтовый массив становится буквальным телом HTTP-запроса.

Аналогично, какая будет кодировка строки, созданной с помощью TaskOptions # param (String, byte []) и получено через ServletRequest # getParameter (String)

Параметры кодируются с использованием форменкодирования, как в обычном запросе GET или POST.

1 голос
/ 10 марта 2011

На первом я понятия не имею.Однако я сделаю ставку на UTF-8, поскольку Javadoc везде упоминает UTF-8.Вы можете отладить тело запроса с помощью средства отладки HTTP, такого как Fiddler2.Вы можете проверить строки со специальными символами UTF-8, которые преобразуются в байтовый массив на string.getBytes("UTF-8"), а затем прочитать его на стороне сервлета.Если он возвращает те же символы, то вероятность того, что он использует UTF-8, определенно велика.

Для второго, который зависит от атрибута charset в заголовке запроса Content-Type.Это, однако, более чем часто отсутствует (по крайней мере, когда используется обычный веб-браузер).Однако вы можете установить его самостоятельно с помощью ServletRequest#setCharacterEncoding() до того, как получит доступ к любым данным из тела запроса.

if (request.getCharacterEncoding() == null) {
    request.setCharacterEncoding("UTF-8");
}

В противном случае будет использоваться платформа по умолчанию,как указано Charset#defaultCharset().

...