java Tomcat的JspWriter编码不正确
我有一个Tomcat 7的默认设置,所有与java相关的东西都配置为使用utf-8
这不起作用(utf-8字符被损坏):
<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<%@ page import="java.net.*" %>
<%@ page import="java.io.*" %>
<%
URL target = new URL("http://en.wikipedia.org/wiki/Main_Page");
Reader input = new BufferedReader(new InputStreamReader(target.openStream()));
StringWriter buffer = new StringWriter();
char[] chrs = new char[1024 * 4];
int n = 0;
while (-1 != (n = input.read(chrs)))
{
buffer.write(chrs, 0, n);
}
StringReader reader = new StringReader(buffer.toString());
n = 0;
while (-1 != (n = reader.read(chrs)))
{
out.write(chrs, 0, n);
}
%>
确实如此,但会记录非法状态例外:
<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<%@ page import="java.net.*" %>
<%@ page import="java.io.*" %>
<%
URL target = new URL("http://en.wikipedia.org/wiki/Main_Page");
Reader input = new BufferedReader(new InputStreamReader(target.openStream()));
StringWriter buffer = new StringWriter();
char[] chrs = new char[1024 * 4];
int n = 0;
while (-1 != (n = input.read(chrs)))
{
buffer.write(chrs, 0, n);
}
StringReader reader = new StringReader(buffer.toString());
OutputStreamWriter output = new OutputStreamWriter(response.getOutputStream());
n = 0;
while (-1 != (n = reader.read(chrs)))
{
output.write(chrs, 0, n);
}
%>
我一直在寻找,但没有找到答案。这是Tomcat里的一只虫子,还是我遗漏了什么
# 1 楼答案
当您构造^{} 而不将字符集指定为第二个参数时,将使用平台默认编码,通常是ISO-8859-1。您需要指定与目标URL的响应头中指定的字符集相同的字符集,即UTF-8
之所以产生} ,但您在JSPscriptlet中调用^{} 。这不能像javadoc中解释的那样同时完成
IllegalStateException
,是因为您是在JSP而不是Servlet中执行此操作的。JSP在内部使用^{