编码问题

时间:2011-06-13 21:39:08

标签: java encoding utf-8

java源文件中用于电子邮件的java字符串存在问题。该字符串包含“Protégé”。我能够确定的服务器环境使用UTF-8。

所以我把它转换成了UTF-8的“Protégé”。它在我们的服务器上工作得很好,但是当我在本地运行它时它没有正确地翻译它。所以我改变了eclipse在首选项下使用UTF-8,但它并没有在本地翻译它。仍然显示“Protégé”。有什么想法吗?

来自评论:

  

我在本地和我们的服务器上运行:

OutputStreamWriter out = new OutputStreamWriter(new ByteArrayOutputStream());
System.out.println(out.getEncoding());
     

它在我们的JBoss服务器上本地显示Cp1252和UTF-8。我们最初使用的是“Protégé”字符串,但仅限于JBoss   显示“Prot”。

     

当我使用"Prot\u00e9g\u00e9"时,它在本地工作正常但在我们的服务器上运行时显示“Protg”。

2 个答案:

答案 0 :(得分:2)

如果字符串包含"Prot\u00e9g\u00e9",则排除了编译器编码问题(如SyntaxT3rr0r所提到的),因为它现在在Java字符串中正确(除非存在编译器错误,我不会假设。)

因此我们在输出,传输和显示之间存在问题。你如何看待服务器的输出?可能是某处有一些重新编码会破坏你的字符串。或者某些输出被错误声明。

如果您使用终端/命令窗口查看输出,请考虑在连接到服务器之前将其设置为UTF-8。


是的,Java在内部使用UTF-16作为字符串,但是一些系统相关的编码作为OutputStreamWriter / InputStreamReader的编译器默认和默认编码以及在字符串和字节之间进行转换的其他几个API。看起来这是服务器上的UTF-8和客户端系统上的Windows-1252。这在这里真的不重要。

答案 1 :(得分:0)

试试这个:

    MimeMessage msg = new MimeMessage(session);
    MimeBodyPart mbp1 = new MimeBodyPart();
    mbp1.setDataHandler(new DataHandler(new ByteArrayDataSource(message.toString, "text/html")));        
    mbp1.setContent(new String(message.getBytes("UTF-8"),"ISO-8859-1"), "text/html");
    Multipart mp = new MimeMultipart();
    mp.addBodyPart(mbp1);
    msg.setContent(mp, "text/html");

设置您的语言字符集而不是" ISO-8859-1"