2009-11-16 53 views
3

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

然而,如果相同的字符串(包含相同的内容)被用于通过一个jsp页面呈现内容在浏览器中,字符,如→显示为一个问号(?)

当在存储内容String变量,我要确保我使用:的

String myStr = new String(bytes[], charset) 

而不只是:

String myStr = "<html><head/><body>&rarr;</body></html>"; 

有人能告诉我为什么字符串内容获取写入文件系统,但不会在jsp /浏览器中呈现?

谢谢。

+1

看起来你没有在页面的标题中提供正确的“charset”。尝试将浏览器中的编码更改为UTF-8 – 2009-11-16 23:18:55

+1

您不应更改浏览器中的编码。您应该*指示*浏览器通过相应地设置响应编码来使用正确的编码。 – BalusC 2009-11-16 23:20:45

+0

如果您的其他评论表明,您在服务器端看不到字符,那么接下来要检查的是如何访问该字节数组。你在读文件吗?你是否设置了编码?我理所当然地认为charset等于'“UTF-8”'。 – Yishai 2009-11-16 23:26:10

回答

4

但在jsp /浏览器中不呈现?

您还需要设置响应编码。

<meta http-equiv="content-type" content="text/html; charset=utf-8"> 
+0

当我尝试使用System.out.println(...)在控制台上打印java字符串变量的内容时,我看到“?”而不是右箭头,所以我的猜测是JSP会得到问号,这就是为什么它在浏览器中显示问号的原因。我认为这个问题出现在我的java代码中,也许我需要用其他方式指定String内容的编码。 – 2009-11-16 23:21:53

+1

然后控制台也应该配置为使用UTF-8。你可以在这里找到更多的背景信息和详细的解决方案:http://balusc.blogspot.com/2009/05/unicode-how-to-get-characters-right.html希望这有助于。 – BalusC 2009-11-16 23:27:21

1

可能性:

  1. 浏览器不会在JSP中,你可以使用

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

    这实际上已经为HTML <head>设置以下meta标签相同的效果做到这一点支持UTF-8

  2. 您的HTTP头中没有Content-Type: text/html; charset=utf-8