2012-06-20 5 views
0

У меня есть поле ввода в моем веб-приложение, если я печатаю следующий вход:IllegalDataException при разборе специальный символ

голец ʃƪ

на стороне сервера, когда я пытаюсь создать XML-документ, используя JDOM он выходит из строя средств следующее исключение:

org.jdom.IllegalDataException: данные «символ (3A» не является законным для атрибута JDOM:. 0x1a не юридический характер XML

 at org.jdom.Attribute.setValue(Attribute.java:491)  
    at org.jdom.Attribute.<init>(Attribute.java:228) 
    at org.jdom.Attribute.<init>(Attribute.java:251) 
    at org.jdom.Element.setAttribute(Element.java:1128) 

это как браузер кодирует Ajax вызов ... & MESSAGE = символ% 20 (3% 1AA

на стороне сервера, когда я pRequest.getParameter ("MESSAGE") ; возвращает меня:?. «символ (3A»

Любые идеи, что происходит там

ответ

1

Он работает сейчас.

Я переключился с JQuery плагин UrlEncode к родной Javascript функция:

encodeURIComponent() 

Кроме того, я обнаружил, что в AJAX звонка можно указать CONTENTTYPE

contentType: "application/x-www-form-urlencoded; charset=UTF-8" 
0

В XML 1.0 Spec не позволяет для символа 0x1A, чтобы использовать ... когда это не Юникоде символов

http://www.w3.org/TR/2008/PER-xml-20080205/#charsets

1.1 спецификации XML делает позволяет 0x1A характер, я вижу: http://www.w3.org/TR/2004/REC-xml11-20040204/#NT-Char

Три вещи, хотя:

  • JDOM 1.x (и 2.x) отклонит без XML1.0 символов.
  • Даже в XML 1.1 символ 0x1a является «ограниченным» (я не уверен на 100%, что это значит, я расследую).
  • Вы уверены, что вы хотите быть, используя характер «Замена» (0x1A)

Независимо от вышесказанного, я подозреваю, что у вас есть проблема в коде между полем ввода и JDOM setAttribute (...) вызов. Есть ли что-то между этими местами, которое меняет кодировку символов, сериализует или иным образом изменяет входное значение? Я подозреваю, что есть еще одна проблема, возникающая до того, как вызывается JDOM, которая изменяет данные, так как вряд ли вы действительно пытаетесь загрузить char 0x1a в качестве символа XML.

0

Поскольку @rolfl подозревает, что-то очень сильно в вашем браузере. Что вы используете?

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

Предполагая, что вы пытаетесь ввести эти символы:

  • ʃ, Unicode U + 0283 (латинская строчная эш)
  • ƪ, Unicode U + 01AA (латинская буква обратной эш петли)

Мы можем видеть, что кодировка браузера вытекающая из точки юникода кода для этих двух символов:

  • (, случается, 28 в ASCII наборе символов
  • 3, оставшиеся 3
  • % 1A, 1A не является юридическим характером URL-поэтому он кодируется
  • A, оставшийся A

Является ли это некоторой javascript-библиотекой ajax, которую вы используете? Может быть, время переключиться?