【问题标题】:Convert iso8859-1 to utf8 in java在java中将iso8859-1转换为utf8
【发布时间】: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


【解决方案1】:

您不会将字符串从一种编码转换为另一种编码。 String 是一系列 chars,仅此而已。对于它的价值,它可能是一系列信鸽。鸽子没有编码。 chars 也不行。

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

【讨论】:

  • 干杯,这让事情更清楚了。如果可能的话,我非常感谢对已编辑问题的任何反馈。
  • 你能展示你用来写邮件正文的代码吗?我的第一个猜测是您在编写时没有指定编码
  • 原来是 MimeMessage.java 类将编码设置为 iso8859-1,而不是使用 MimeMessage.setContent 有另一种方法 MimeMessage.setText(String text, String charset);这允许我将编码设置为 utf8。为您的反馈干杯,尽管非常感谢并澄清了很多事情。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 2011-09-04
    • 1970-01-01
    • 2016-02-10
    • 2015-11-11
    • 2021-03-08
    • 2013-01-15
    相关资源
    最近更新 更多