Java字符串编码到UTF-8

Java字符串编码到UTF-8,java,string,jsp,encoding,character-encoding,Java,String,Jsp,Encoding,Character Encoding,我有一些HTML代码存储在Java.lang.String变量中。我将该变量写入一个文件,并在将字符串变量的内容写入文件系统上的文件时将编码设置为UTF-8。我打开那个文件,一切看起来都很好。→ 显示为右箭头 但是,如果jsp页面使用相同的字符串(包含相同的内容)在浏览器中呈现内容,则→ 显示为问号(?) 在字符串变量中存储内容时,我确保使用: String myStr = new String(bytes[], charset) 而不仅仅是: String myStr = "<ht

我有一些HTML代码存储在Java.lang.String变量中。我将该变量写入一个文件,并在将字符串变量的内容写入文件系统上的文件时将编码设置为UTF-8。我打开那个文件,一切看起来都很好。→ 显示为右箭头

但是,如果jsp页面使用相同的字符串(包含相同的内容)在浏览器中呈现内容,则→ 显示为问号(?)

在字符串变量中存储内容时,我确保使用:

String myStr = new String(bytes[], charset)  
而不仅仅是:

String myStr = "<html><head/><body>&rarr;</body></html>";
String myStr=“&rarr;”;
有人能告诉我为什么字符串内容可以完美地写入文件系统,但不能在jsp/浏览器中呈现

谢谢

但不在jsp/浏览器中呈现

您还需要设置响应编码。在JSP中,可以使用

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

这实际上与在HTML中设置以下元标记的效果相同:


可能性:

  • 浏览器不支持UTF-8
  • 您没有
    内容类型:text/html;HTTP头中的字符集=utf-8

  • 懒惰的开发人员(=me)使用Apache公共语言StringEscapeUtils.escapeHtml,这将帮助您处理所有“奇数”字符。让浏览器完成html实体的最终翻译

    看起来您没有在页面的标题中提供正确的
    字符集。尝试将浏览器中的编码更改为UTF-8您不应更改浏览器中的编码。您应该通过相应地设置响应编码来指示浏览器使用正确的编码。如果如您的其他评论所示,您在服务器端没有正确地看到字符,那么接下来要检查的是如何获得该字节数组。你在读文件吗?你设置编码了吗?我想当然地认为charset等于
    “UTF-8”
    。我有一个生成html代码并将其存储在字符串变量中的类。html代码首先存储在一个字符串中(未定义编码),然后我从该字符串中获取字节[],创建一个新的字符串变量,将字节[]与正确的编码一起传递给新的字符串变量。完全不需要对字符串进行双重转换。字符串在内部将其状态存储为16位unicode,您所做的只是与字节数组之间的转换。假设您使用“UTF-8”作为编码调用getBytes()(如果不是,这就是您的问题所在),让我们关注第一个字符串。您是如何生成的,您是从任何二进制源(文件、字节数组或其他)读取的。更重要的是为什么?这就是JSP为您所做的。当我尝试使用System.out.println(…)在控制台上打印java字符串变量的内容时,我看到的是“?”而不是右箭头,所以我猜JSP会得到问号,这就是为什么它在浏览器中显示问号的原因。我认为问题出在我的java代码中,也许我必须以其他方式指定字符串内容的编码。然后控制台也应该配置为使用UTF-8。您可以在这里找到更多的背景信息和详细的解决方案:希望这对您有所帮助。
    <meta http-equiv="content-type" content="text/html; charset=utf-8">