URLDecoder: недопустимые шестнадцатеричные символы в шаблоне escape (%) - для входной строки: "^*"

Я хочу отправить по электронной почте этот текст

Destination : 6W - ATLANTA WEST!@#$%^*!gemini!@#$%^*!jfds!@#$%^*!,Trailer Number : 000564,,Drop empty trailer at Plant Numbe :546,Pick up trailer at Plant Number :45, Bill Date : 25-Jan-2013,Bill Time - Eastern Time : 1,Trip Number :456,MBOL :546,Carrier :Covenant!@#$%^*!test@shaw.com!@#$%^*!transport@shaw.com!@#$%^*!test@transport.com!@#$%^*!antoalphi@gmail.com,Destination : 6W - ATLANTA WEST!@#$%^*!gemini!@#$%^*!jfds!@#$%^*!,Customer Name : 567,Cusomer Delivery Address : 657567657,General Comments :657,Warehouse Comments : 65,Carrier Comments : ,Appointment Date :25-Jan-2013,Appointment Time : 1am,Rail Only :Standard,Total Weight : 45645

и я использовал это mailContent = URLDecoder.decode(Body, "UTF-8"); расшифровывает,

но это дает мне это исключение URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "^*"

Может ли кто-нибудь из вас помочь мне, как решить это. Я получаю это при отправке почты.

С уважением

2 ответа

Решение

Вы пытаетесь URL-декодировать то, что не было URL-кода в первую очередь. Что не так с телом как оно есть? Другими словами, что произойдет, если вы просто используете:

mailContent = Body

(В кодировке URL символ% используется с двумя шестнадцатеричными цифрами для кодирования символов, которые могут вызвать проблемы, например, / будет закодирован как %2F, поскольку его код ASCII равен 47 (десятичный) или 2F (шестнадцатеричный). В вашем теле, % сопровождается двумя символами, которые не являются шестнадцатеричными цифрами - вот как я могу сказать, что он не был закодирован в URL, и почему декодер дает ошибку.)

Просто прекратите вызывать URLDecoder.decode(), и вы перестанете получать ошибку! Строковое значение, которое вы передаете ему, не закодировано в URL.

Существуют различные формы кодирования MIME, которые вы можете рассмотреть, если отправляете электронное письмо с содержимым, которое обычно не допускается в сообщении электронной почты без кодировки. Там ссылки могут быть полезны:

  1. Что разрешено в SMTP: http://www.apps.ietf.org/rfc/rfc788.html
  2. Базовая кодировка MIME: http://www.apps.ietf.org/rfc/rfc1341.html
  3. Поддержка Java MIME: http://docs.oracle.com/javaee/1.4/api/javax/mail/internet/MimeUtility.html

Например, вы можете попробовать:

String sendable = MimeUtility.encodeText(body,"UTF-8","BASE64")
Другие вопросы по тегам