gpt4 book ai didi

java - 有没有办法为 Java 的字符集名称添加别名

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:24:16 27 4
gpt4 key购买 nike

我遇到一个异常,隐藏在第 3 方库中,消息如下:

java.io.UnsupportedEncodingException: BIG-5

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

这与“utf-8”不同,它有一些别名更宽容。例如,Charset.forName("utf8") 和 Charset.forName("utf-8") 都可以正常工作。

问题:有没有办法添加别名,使“big-5”映射到“big5”?

最佳答案

你可以试试 mail.mime.contenttypehandler系统属性:

In some cases JavaMail is unable to process messages with an invalid Content-Type header. The header may have incorrect syntax or other problems. This property specifies the name of a class that will be used to clean up the Content-Type header value before JavaMail uses it. The class must have a method with this signature: public static String cleanContentType(MimePart mp, String contentType) Whenever JavaMail accesses the Content-Type header of a message, it will pass the value to this method and use the returned value instead.

这方面的一个例子是:

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 运行时将输出:

text/plain; charset=big5
[text/plain; charset=big-5]

关于java - 有没有办法为 Java 的字符集名称添加别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40876598/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com