用Java将字符串从UTF-8转换为ISO 8859-1

用Java将字符串从UTF-8转换为ISO 8859-1,java,character-encoding,Java,Character Encoding,我想用Java将UTF-8字符串编码为ISO 8859字符串 我有这个: String title = new String(item.getTitle().getText().getBytes("ISO-8859-1")); 但是它不起作用,输出是S¸rensen,例如这个问题不能这样解决。Java中的字符串总是采用相同的编码(UTF-16),基本上只更改了内容。您需要在此字符串的目标中设置编码。如果是标准输出,则需要设置其编码。如果它是一个文件,您需要设置它的Writer编码。如果是HTM

我想用Java将UTF-8字符串编码为ISO 8859字符串

我有这个:

String title = new String(item.getTitle().getText().getBytes("ISO-8859-1"));

但是它不起作用,输出是S¸rensen,例如

这个问题不能这样解决。Java中的字符串总是采用相同的编码(UTF-16),基本上只更改了内容。您需要在此字符串的目标中设置编码。如果是标准输出,则需要设置其编码。如果它是一个文件,您需要设置它的
Writer
编码。如果是HTML页面,则需要设置响应编码。如果是数据库,则需要设置DB/table/connection编码。等等

更新:根据评论:


该字符串来自UTF-8格式的RSS源,我想在使用ISO 8859编码的HTML页面中显示

您需要将HTML页面的编码从老式的ISO 8859编码升级到现代和世界领先的UTF-8编码

更新2:根据评论:

Firefox在默认情况下以正确的编码(utf-8)显示it,但Internet Explorer则没有

那么文本实际上是好的。您不需要将字符串转换为其他编码。症状表明响应标头中缺少字符编码信息。Firefox实际上有一个非常智能的编码检测器,而IE在编码未知时将使用平台默认编码。但是,如果HTML文档的doctype和head格式(严重)不正确,IE也会失败

因此,要么HTML响应在语法上无效,要么响应内容类型设置不正确。假设您的网站和您使用的是JSP/Servlet(在这里判断您的帖子历史之后),您基本上需要在JSP的顶部添加以下行:

<%@ page pageEncoding="UTF-8" %>


就这些。它将自动设置响应编码(以便服务器知道使用哪种编码将字符写入响应的字节流)和
内容类型
响应头中的编码(以便客户端知道使用哪种编码从响应的字节流读取/显示这些字符)。有关更多背景信息,您可能会发现有用的信息。

Java中没有“UTF-8字符串”这样的东西。。。只有字符串,它们总是使用Unicode。(它们实际上总是UTF-16。)

可以使用ISO-8859-1编码形式的字符串(或UTF-8或其他任何形式)的字节数组,但使用带编码的字符串是没有意义的

如果您在某处读取了编码不正确的字符串,正确的做法是修复读取该字符串的代码,而不是稍后尝试对字符串表单中的数据进行解码/编码


如果您能提供有关该问题的更多信息,我们可能会提供一些更有用的建议。

该字符串来自UTF-8中的RSS源,我想在使用ISO 8859的HTML页面中显示encoding@Derk:那么您所需要做的就是确保您以UTF-8格式读取RSS提要。这将使正确的数据进入字符串。假设您正在使用一个了解HTML编码的框架,您应该能够写出数据。。。尽管ISO-8859-1显然没有涵盖很多字符。(你有什么特别的理由不使用UTF-8编写HTML吗?一般来说,这是一个更好的计划,因为这样你可以覆盖所有Unicode字符。)我正在使用rssutils.jar库,但我找不到设置源代码编码的方法。@Derk:老实说,我希望它能自动检测到它。您是如何为其提供RSS的?@Derk:根据该规范,将内容解释为UTF-8实际上是一个错误。在这种情况下,两个错误可能会变成一个正确,但是那些产生坏XML的人仍然应该受到惩罚。