在java中将iso8859-1转换为utf8

时间:2014-04-11 06:16:25

标签: java string encoding utf-8 iso-8859-1

对于iso8859-1编码的String,将它转换为utf8的最优雅方法是什么?

String convertedString = new String(s.getBytes("UTF-8"), "UTF-8"); //is this correct, elegant etc?

注意我知道已经存在与此类似的问题,但我发现它们的答案含糊不清,并且没有显示整个转换。

编辑:对我的问题的更详细描述

//message is a String
//msg.setContent is this method http://docs.oracle.com/javaee/6/api/javax/mail/internet/MimeMessage.html#setContent%28java.lang.Object,%20java.lang.String%29

msg.setContent(message, "text/plain"); 
msg.addHeader("Content-Type", "text/plain; charset=\"utf-8\"");

当在邮件客户端收到此信息时,标题为utf8,但内容(即消息字符串)实际上是iso8859-1编码,这导致åäö等字符被错误地呈现。我想知道的是如何使内容utf8编码。

编辑II :(回答)原来是MimeMessage.java类将编码设置为iso8859-1而不是使用MimeMessage.setContent,还有另一种方法MimeMessage.setText(String text,String charset);这允许我将编码设置为utf8。

2 个答案:

答案 0 :(得分:3)

您不能将字符串从一种编码转换为另一种编码。 String是一系列char s,而且就是char。对于它的价值,它可能是一系列的载体鸽。鸽子没有编码。也没有Writer s。

使用Reader时,您要做的是将其转换为字节。 (或使用Charset时从字节读取)。 此时编码(a {{1}})很重要。

答案 1 :(得分:0)

不,这不正确。字符串始终为UTF-16。您只能对字节数组进行编码/解码。