Я заметил, что Java UriBuilder
не кодирует символы :
, включенные в мои значения параметров запроса (строки в формате ISO 8601).
Согласно Википедии, кажется, что двоеточие должно быть закодировано.
В частности, при кодировании строки запроса используются следующие правила:
- Буквы (A-Z и a-z), числа (0-9) и символы '.', '-', '~' и '_' остаются как -s
- SPACE кодируется как '+' или %20 [править]
- Все остальные символы кодируются как шестнадцатиричное представление% FF с любыми символами, отличными от ASCII, которые сначала кодируются как UTF-8 (или другие заданные кодирование)
Итак, что это за сделка? Должны быть закодированы двоеточия в параметрах запроса?
Обновление:
Я просмотрел спецификацию синтаксиса URI (RFC 3986), и похоже, что коды кодов в параметрах запроса действительно не нужны. Здесь выдержка из ABNF для URI:
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
query = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=