неправильная кодировка для xml

#java #encoding

#java #кодирование

Вопрос:

У меня есть строка, подобная этой " <person name="peter" ><person>"

Кодировка URL

 URLEncoder.encode(person.toString(),"UTF-8");
  

но кодировка плохая, потому что для пробелов сделайте insted of , а для = он выдает другие значения, ребята, вы можете мне помочь?

Комментарии:

1. Вы уверены, что это не конечный тег? Это должно быть «</person>»

2. В чем именно проблема? Это правильная кодировка application/x-www-form-urlencoded типа (см. en.wikipedia.org/wiki/Percent-encoding ).

3. Почему вы хотите, чтобы URL-кодировал это? Вы понимаете, что делаете?

4. ну, на самом деле мне нужно получить доступ к веб-сервису, который не является моим, и ответ таков: «% 3C / person% 3E»

5. @subspider Итак, что вы на самом деле хотите, это URLDECODE этого ответа, верно?

Ответ №1:

Это точно так, как указано в URLEncoder javaDoc. Пространство преобразуется в и = является «небезопасным» и, следовательно, кодируется в = .

Если вам нужно вместо , просто выполните некоторую постобработку:

 URLEncoder.encode(person.toString(),"UTF-8").replace(" ", " ");
  

Комментарии:

1. спасибо за помощь, мне просто интересно, существует ли другой тип кодировки

Ответ №2:

Учитывая ваш комментарий, я предполагаю, что вы хотите декодировать ответ веб-сервиса.

 // the answer you receive from the webservice
string webserviceResponse = "";

// turn into a "good" Xml string
string person = URLDecoder.decode(webserviceResponse, "UTF-8");
  

даст вам

 <person name="peter"></person>
  

в качестве значения person .

Комментарии:

1. нет, веб-сервис выполняет это кодирование, но даже простое @ преобразуется как @

2. @subspider Я не предполагал, что веб-сервису действительно нужно кодировать. Из вашего комментария выше я предположил, что вы действительно хотите декодировать ответ, который вы получаете от этого внешнего веб-сервиса.

3. Преобразование специальных символов @subspider является целью URLEncoding.