Java邮件抛出Java.io.UnsupportedEncodingException:us ascii big5
我正在使用java mail,并面临以下错误:java.io.UnsupportedEncodingException:us ascii big5 at sun.nio.cs.StreamDecoder.forInputStreamReader 以下是导致此问题的Mime头Java邮件抛出Java.io.UnsupportedEncodingException:us ascii big5,exception,jakarta-mail,Exception,Jakarta Mail,我正在使用java mail,并面临以下错误:java.io.UnsupportedEncodingException:us ascii big5 at sun.nio.cs.StreamDecoder.forInputStreamReader 以下是导致此问题的Mime头 Content-Type: text/plain; charset="us-ascii, big5" (我在内容中看到非英语字符) 这有效吗?解决办法是什么 还有一个相关问题,我看到了导致此异常的字符集的不同变体(字符集值
Content-Type: text/plain; charset="us-ascii, big5"
(我在内容中看到非英语字符)
这有效吗?解决办法是什么
还有一个相关问题,我看到了导致此异常的字符集的不同变体(字符集值周围的spl字符):例如
charset="'UTF-8'"
charset=`UTF-8`
charset=UTF=8
charset=utf
charset=\"UTF-8\" etc.,
请注意,这种情况不仅发生在utf-8上,也发生在其他字符集上,但outlook等电子邮件客户端可以灵活地打开和解码这些电子邮件
有什么想法吗?所有这些都是无效的字符集。尽可能向创建这些消息的程序的所有者报告此类问题。如果这些信息是垃圾邮件(通常是),就把它们扔掉;这些错误对于检测垃圾邮件是一个很好的启发 有处理这些错误的策略 你能试试message.setHeader(“内容类型”,“文本/普通;字符集=UTF-8”)吗 不,消息进来了(我没有控制权),我必须运行javamail库来解析内容。传入的消息不是我创建的 在不实际修改电子邮件的情况下转换内容类型
package cool.part.team;
import java.util.Arrays;
import javax.mail.Session;
import javax.mail.internet.ContentType;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimePart;
public class EverythingIsAscii {
/**
* -Dmail.mime.contenttypehandler=cool.part.team.EverythingIsAscii
*/
public static void main(String[] args) throws Exception {
MimeMessage msg = new MimeMessage((Session) null);
msg.setText("test", "us-ascii, big5");
msg.saveChanges();
System.out.println("Transformed = "+ msg.getContentType());
System.out.println("Original = " + Arrays.toString(msg.getHeader("Content-Type")));
}
public static String cleanContentType(MimePart p, String mimeType) {
if (mimeType != null) {
String newContentType = mimeType;
try {
ContentType ct = new ContentType(mimeType);
String cs = ct.getParameter("charset");
if (cs == null || cs.contains("'")
|| cs.contains(",")) { //<--Insert logic here
ct.setParameter("charset", "us-ascii");
newContentType = ct.toString();
}
} catch (Exception ignore) {
//Insert logic to manually repair.
//newContentType = ....
}
return newContentType;
}
return mimeType;
}
}
您必须更正此示例代码以正确转换字符集,因为所有内容都不是ASCII。您可以尝试message.setHeader(“Content Type”,“text/plain;charset=UTF-8”);不,消息进来了(我没有控制权),我必须运行javamail库来解析内容。传入的消息不是我创建的。Big5本身的可能重复不是问题,可以在代码中处理。更大的问题是组合了两个字符集。例如:charset=“us ascii,big5”不确定如何在代码中处理,因为这应该基于内容,我们需要进行复杂的解析。@SathishKumar在回答中忽略big5。dupe解释说,您可以创建一个方法,在JavaMail处理内容类型头之前将其转换为任何字符串。
Transformed = text/plain; charset=us-ascii
Original = [text/plain; charset="us-ascii, big5"]