То, как я правильно декодирую unicode параметры, передало сервлету

Для запуска javascript можно использовать внешнюю библиотеку, такую ​​как RHINO или NASHORN. И javascript может оценивать простую формулу без парсинга строки. Не влияет на производительность, если код написан хорошо. Ниже приведен пример с RHINO -

public class RhinoApp {
    private String simpleAdd = "(12+13+2-2)*2+(12+13+2-2)*2";

public void runJavaScript() {
    Context jsCx = Context.enter();
    Context.getCurrentContext().setOptimizationLevel(-1);
    ScriptableObject scope = jsCx.initStandardObjects();
    Object result = jsCx.evaluateString(scope, simpleAdd , "formula", 0, null);
    Context.exit();
    System.out.println(result);
}
36
задан Grant Wagner 23 January 2009 в 03:03
поделиться

5 ответов

Вы почти там. EncodeURIComponent правильно кодирует к UTF-8, который является тем, что необходимо всегда использовать в URL сегодня.

проблема состоит в том, что отправленная строка запроса становится искалеченной на пути в Ваш сценарий серверной стороны, потому что getParameter () использует ISO-8559-1 вместо UTF-8. Это происходит с Древних времен перед сетью, обоснованной на UTF-8 для URI/IRI, но это довольно вызывает жалость, что спецификация Сервлета не была обновлена для соответствия действительности, или по крайней мере предоставляет надежную, поддерживаемую возможность для нее.

(Существует request.setCharacterEncoding в Сервлете 2.3, но это не влияет на парсинг строки запроса, и если единственный параметр был считан прежде, возможно некоторым другим элементом платформы, это не будет работать вообще.)

, Таким образом, Вы должны к futz вокруг с определенными для контейнера методами получить надлежащий UTF-8, часто вовлекая материал в server.xml. Это полностью сосет для распределения веб-приложений, которые должны работать где угодно. Поскольку Tomcat видит http://wiki.apache.org/tomcat/FAQ/CharacterEncoding и также What' s различие между " URIEncoding" из Tomcat, Кодируя Фильтр и request.setCharacterEncoding.

45
ответ дан Vadzim 23 September 2019 в 22:13
поделиться

Я подозреваю, что искажение данных происходит в запросе, т.е. заявленное кодирование запроса не соответствует тому, который на самом деле используется для данных.

, Что делает request.getCharacterEncoding() возврат?

я действительно не знаю, как JavaScript обрабатывает кодировку или как заставить его использовать определенного.

необходимо удостовериться, что кодировка используется правильно на всех этапах - НЕ пытаются "зафиксировать" данные при помощи new String() getBytes() в точке, где они были уже закодированы неправильно.

Редактирование: Это может помочь иметь страницу источника (та с JavaScript) также закодированный в UTF-8 и объявило как таковой в его Типе контента. Тогда я полагаю, что JavaScript может принять значение по умолчанию к использованию UTF-8 для его запроса - но это не определенное знание, просто догадки.

2
ответ дан Michael Borgwardt 23 September 2019 в 22:13
поделиться

Вы могли всегда использовать JavaScript для управления текстом далее.

<div id="test">a</div>
<script>
var a = document.getElementById('test');
alert(a.innerHTML);
a.innerHTML = decodeURI("Yahoo!%E2%84%A2");
alert(a.innerHTML);
</script>
0
ответ дан jacobangel 23 September 2019 в 22:13
поделиться

Я думаю, что могу заставить следующее работать:

encodeURIComponent(escape(lnk.title))

, Который дает мне %25u2122 (для & #8482) или %25AE (для & #174), который будет декодировать к %u2122 и %AE соответственно в сервлете.

я должен тогда быть в состоянии превратить %u2122 в '\u2122' и %AE в '\u00AE' относительно легко использование (char) (base-10 integer value of %uXXXX or %XX) в соответствии и цикле замены с помощью регулярных выражений.

т.е. - соответствие /%u([0-9a-f]{4})/i, извлеките подвыражение соответствия, преобразуйте его, чтобы основывать 10, превратить его в символ и добавить его к выводу, затем сделайте то же с /%([0-9a-f]{2})/i

0
ответ дан Grant Wagner 23 September 2019 в 22:13
поделиться

У меня та же проблема, и я решил ее путем декодирования Request.getQueryString () с помощью URLDecoder () и после извлечения моих параметров.

String[] Parameters = URLDecoder.decode(Request.getQueryString(), 'UTF-8')
                       .splitat('&');
19
ответ дан 27 November 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: