我正在尝试使用 Java 中的套接字编写简单的应用程序,以逐行读取邮件服务器中的标头。问题是有时邮件主题有不同的字符集(iso-8859-2),我无法正确显示一些特殊字符。使用 System.out.println("ńł") 时显示特殊字符的正确方法是什么?我知道我必须使用“String s.get bytes”,但无论哪种方式都行不通。是否有可能正确显示特殊字符。也许我做错了什么(我是 java 新手),但是在花了将近一周的时间检查不同的代码之后,我已经厌倦了。这是来自示例测试应用程序的简单代码(非原始代码):
String s = "=?ISO-8859-2?Q?Zesp=F3=B3_Gmaila?=";
byte[] bytes = s.getBytes(Charset.forName("ISO-8859-2"));
String foo = new String(bytes, Charset.forName("UTF-8"));
System.out.println(foo);
//System.out.println(Charset.defaultCharset().name());
输出:=?ISO-8859-2?Q?Zesp=F3=B3_Gmaila?=
来自 MX 的示例答案:
主题:=?ISO-8859-2?Q?Gmail_jest_inny=2E_Oto=2C_co_musisz_o_nim_wiedzie=E6=2E?=
先感谢您
亚当
我无法在新评论中列出完整列表,所以这里有 Esailija 帮助的所有内容:
package javaapplication7;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.net.QuotedPrintableCodec;
public class JavaApplication7 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String s = "=?ISO-8859-2?Q?Zesp=F3=B3_Gmaila?=";
Pattern p = Pattern.compile("=\\?([a-zA-Z0-9\\-]+)\\?Q\\?");
Matcher m = p.matcher(s);
if( m.find() ) {
String encoding = m.group(1);
String target = s.replaceAll(p.toString(),"");
QuotedPrintableCodec qpc = new QuotedPrintableCodec(encoding);
try {
System.out.println(qpc.decode(target));
} catch (DecoderException e) {
e.printStackTrace();
}
}
}
}
和错误:
run:
org.apache.commons.codec.DecoderException: Invalid quoted-printable encoding
at org.apache.commons.codec.net.QuotedPrintableCodec.decodeQuotedPrintable(QuotedPrintableCodec.java:189)
at org.apache.commons.codec.net.QuotedPrintableCodec.decode(QuotedPrintableCodec.java:230)
at org.apache.commons.codec.net.QuotedPrintableCodec.decode(QuotedPrintableCodec.java:279)
at org.apache.commons.codec.net.QuotedPrintableCodec.decode(QuotedPrintableCodec.java:300)
at javaapplication7.JavaApplication7.main(JavaApplication7.java:32)
构建成功(总时间:1 秒)