首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有方法为Java的字符集名称添加别名

是否有方法为Java的字符集名称添加别名
EN

Stack Overflow用户
提问于 2016-11-29 22:02:49
回答 1查看 698关注 0票数 7

我得到了一个例外,被埋在一个第三方图书馆里,上面有这样的信息:

java.io.UnsupportedEncodingException:大-5

我认为发生这种情况是因为Java没有为java.nio.charset.Charset定义这个名称。Charset.forName("big5")很好,但是Charset.forName("big-5")抛出了异常。(所有这些名称似乎都不区分大小写。)

这与"utf-8“不同,后者有一些别名,以求更加宽容。例如,Charset.forName("utf8")和Charset.forName("utf-8")都工作得很好。

问:是否有一种方法可以将别名添加到"big5“中?

EN

回答 1

Stack Overflow用户

发布于 2016-12-01 21:09:38

您可以尝试使用mail.mime.contenttypehandler system属性:

在某些情况下,JavaMail无法处理具有无效内容类型头的消息。标题可能有错误的语法或其他问题。此属性指定将用于在JavaMail使用之前清理内容类型标头值的类的名称。类必须有一个带有此签名的方法:公共静态字符串cleanContentType(MimePart mp,String contentType),每当JavaMail访问消息的内容类型头时,它都会将值传递给该方法并使用返回的值。

这方面的一个例子是:

代码语言:javascript
复制
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 FixEncodingName {

    public static void main(String[] args) throws Exception {
        MimeMessage msg = new MimeMessage((Session) null);
        msg.setText("test", "big-5");
        msg.saveChanges();
        System.out.println(msg.getContentType());
        System.out.println(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 ("big-5".equalsIgnoreCase(cs)) {
                    ct.setParameter("charset", "big5");
                    newContentType = ct.toString();
                }
            } catch (Exception ignore) {
                newContentType = newContentType.replace("big-5", "big5");
            }

            /*try { //Fix the header in the message.
                p.setContent(p.getContent(), newContentType);
                if (p instanceof Message) {
                    ((Message) p).saveChanges();
                }
            } catch (Exception ignore) {
            }*/
            return newContentType;
        }
        return mimeType;
    }
}

当与-Dmail.mime.contenttypehandler=FixEncodingName一起运行时,将输出:

代码语言:javascript
复制
text/plain; charset=big5
[text/plain; charset=big-5]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40876598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档