【发布时间】:2014-04-11 06:16:24
【问题描述】:
对于 iso8859-1 编码的 String s,将其转换为 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编码。
编辑二:(答案)原来是 MimeMessage.java 类将编码设置为 iso8859-1,而不是使用 MimeMessage.setContent 有另一种方法 MimeMessage.setText(String text, String charset);这允许我将编码设置为 utf8。
【问题讨论】:
-
你不转换字符串;您只需在将其“序列化”为字节/从字节“反序列化”时选择编码。看here。
-
抱歉,但这对我来说似乎只是语义,我看不出它如何回答我的问题。 SO还鼓励粘贴整个答案,而不仅仅是答案的链接。
-
这不是语义。
String没有没有编码! -
= 只有字节数组有编码?
-
字符串产生的字节是编码过程的结果;由字节产生的
String是解码过程的结果。我发布的链接解释了所有这些(以及常见的误解)。
标签: java string encoding utf-8 iso-8859-1