Я хочу декодировать строку, закодированную с помощью метода java.net.URLEncoder.encode().
Я пробовал использовать функцию unescape() в javascript, но проблема возникает с пробелами, потому что java.net.URLEncoder.encode() преобразует пробелы
в '+', но unescape() не преобразует '+' в пробел.




Попробуйте decodeURI("") или decodeURIComponent("")! -)
Использование функции escape / unescape в JavaScript почти всегда неправильно, она несовместима с кодировкой URL или любой другой стандартной кодировкой в Интернете. Символы, отличные от ASCII, обрабатываются неожиданно, как и пробелы, и старые браузеры не обязательно ведут себя так же.
Как упоминал roenving, вам нужен метод decodeURIComponent (). Это более новое дополнение, которого вы не найдете в IE 5.0, поэтому, если вам нужно поддерживать этот браузер (будем надеяться, что нет, в настоящее время!), Вам придется реализовать эту функцию самостоятельно. А для символов, отличных от ASCII, это означает, что вам необходимо реализовать кодировщик UTF-8. Код доступен, если он вам нужен.
decodeURI [Component] тоже не обрабатывает + как пробел (по крайней мере, на FF3, где я тестировал).
Простое решение:
alert(decodeURIComponent('http://foo.com/bar+gah.php?r=%22a+b%22&d=o%e2%8c%98o'.replace(/\+/g, '%20')))
Действительно, unescape задыхается от этого URL: он знает только символы UTF-16, такие как% u2318, которые не являются стандартными (см. Процентное кодирование).
Пытаться
var decoded = decodeURIComponent(encoded.replace(/\+/g," "));
Просто потому, что он принимает строку в качестве аргумента! -)