对于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。
答案 0 :(得分:3)
您不能将字符串从一种编码转换为另一种编码。 String
是一系列char
s,而且就是char
。对于它的价值,它可能是一系列的载体鸽。鸽子没有编码。也没有Writer
s。
使用Reader
时,您要做的是将其转换为字节。 (或使用Charset
时从字节读取)。 此时编码(a {{1}})很重要。
答案 1 :(得分:0)
不,这不正确。字符串始终为UTF-16。您只能对字节数组进行编码/解码。