Servlet和jsp字符编码特性

时间:2010-11-09 09:29:50

标签: java jsp servlets character-encoding

我有一个webapp,我需要在其上显示unicode字符。当我在jsp中编写字符串时,一切都很好,例如:

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="com.xyz.foo.ConsoleApp" %>
<html>
    <head>
        <meta charset="UTF-8"/>
    </head>
    <body><%= "Setúbal" %></body>
</html>

我得到了所需的输出:Setúbal

但是,servlet中的等效代码无法正确呈现,例如:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter writer = response.getWriter();

    writer.println("<html>");
    writer.println("<head><meta charset='UTF-8'/></head>");
    writer.println("<body>Setúbal</body>");
    writer.println("</html>");
}

在jsp中我从类中加载文本时会发生同样的事情:

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="com.xyz.foo.ConsoleApp" %>
<html>
    <head>
        <meta charset="UTF-8"/>
    </head>
    <body><%= ConsoleApp.getText() %></body>
</html>

在这两种情况下,我都会遇到奇怪的字符:Set√∫bal

所有文件都是UTF-8,响应标头包含以下内容:

Content-Type    text/html; charset=utf-8
Content-Encoding    gzip
Date    Tue, 09 Nov 2010 09:44:05 GMT
Server  Google Frontend
Cache-Control   private, x-gzip-ok=""
Content-Length  438

1 个答案:

答案 0 :(得分:4)

使用javac -encoding参数告诉javac您的java源存储的编码,否则它使用的平台默认值显然不是UTF-8。