URLDecoder:转义(%)模式中的非法十六进制字符 - 对于输入字符串:“^ *”

时间:2013-01-16 16:37:50

标签: java email encode uriencoding

我想发送一封电子邮件

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 个答案:

答案 0 :(得分:2)

您正尝试对首先未进行URL编码的内容进行URL解码。这个身体有什么问题?换句话说,如果您只使用以下内容会发生什么:

mailContent = Body

(在URL编码中,%字符与两个十六进制数字一起用于编码可能导致问题的字符,例如/将被编码为%2F,因为其ASCII码为47(十进制) )或2F(十六进制)。在你的身体中,%之后是两个不是十六进制数字的字符 - 这就是我怎么说它没有被URL编码,以及解码器出错的原因。)

答案 1 :(得分:2)

只需停止调用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
  4. 例如,您可以尝试:

    String sendable = MimeUtility.encodeText(body,"UTF-8","BASE64")