当前位置: 首页 > 知识库问答 >
问题:

使用不同字符集的mx套接字读取线路-iso-8859-2

毋宪
2023-03-14

我正在尝试使用Java中的套接字编写一个简单的应用程序,以逐行读取邮件服务器中的头。问题是,有时邮件主题具有不同的字符集(iso-8859-2),我无法正确显示一些特殊字符。使用系统时显示特殊字符的正确方式是什么。出来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?QGmail\u jest\u inny=2E\u Oto=2C\u co\u musisz\u o\u nim\u 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秒)

共有3个答案

南门向荣
2023-03-14

你可能对波兰字符有问题。我有简单的答案。

String s = "=?ISO-8859-2?Q?Zesp=F3=B3_Gmaila?=";
String test=MimeUtility.decodeText(s);

System.out.println(test);

println为,ZespółGmaila“”。您需要的库是:

import javax.mail.internet.MimeUtility;
呼延原
2023-03-14

使用Apache Commons Codec中的QuotedPrintableCodec:

String s = "=?ISO-8859-2?Q?Zesp=F3=B3_Gmaila";
Pattern p = Pattern.compile("=\\?([a-zA-Z0-9\\-]+)\\?Q\\?"); //For detecting the encoding
Matcher m = p.matcher(s);
if( m.find() ) {
    String encoding = m.group(1);
    String target = s.replaceAll( p.toString(), ""); //Remove the encoding header
    QuotedPrintableCodec qpc = new QuotedPrintableCodec(encoding);
    try {
        System.out.println(qpc.decode(target));
        // prints "Zespół_Gmaila"
    } catch (DecoderException e) {
        e.printStackTrace();
    }

}
华烈
2023-03-14

您可以看到James Server的源代码(是Java的邮件服务器),您可能会找到答案:

  • http://svn.apache.org/viewvc/james/server/trunk/
  • http://james.apache.org/server/

和Mime4J

  • http://james.apache.org/mime4j/
 类似资料:
  • 在我的nodeJS应用程序中,我使用以下代码行获取req。身体 这工作正常,但对我的应用程序的一个请求会引发以下错误: 如果删除前一行,则该行适用于该请求,但在所有其他请求中,我无法检索数据。有办法解决这个问题吗?

  • 问题内容: 我正在开发一个项目,我们需要将我们的信息保存在具有ISO-8859-1表的旧数据库中。因此,在向数据库中写入内容之前,我需要将其从UTF-8转换为ISO-8859-1,并且每次从数据库中检索到它时,都需要将其转换回UTF-8。 我试图将库 **code.google.com/p/go-charset/** 用作以下每个我需要保留的文本字段。 问题是即使使用 toISO88591 函数,

  • 问题内容: 我有ISO-8859-1数据库,所以我希望完全在此代码页中交换请求。那么,如何以正确的方式设置AJAX请求的内容类型呢? 问题答案: 即使这样做很不好(上面有很多评论),也可以:

  • 来自java。lang.StringCodeing: 这就是从Java.lang.getBytes()中使用的,在linux jdk 7中,我一直认为UTF-8是默认字符集? 谢啦

  • socket_read和socket_recv之间有什么区别?我正在尝试使用PHP套接字,但使用socket_read时收到了以下警告: 请帮帮我!