java.io.UnsupportedEncodingException: 'UTF-8'问题

shukewu 2010-11-01 10:43:46
2010-11-1 10:28:27 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
java.io.UnsupportedEncodingException: 'UTF-8'
at sun.io.Converters.getConverterClass(Unknown Source)
at sun.io.Converters.newConverter(Unknown Source)
at sun.io.CharToByteConverter.getConverter(Unknown Source)
at sun.nio.cs.StreamEncoder$ConverterSE.<init>(Unknown Source)
at sun.nio.cs.StreamEncoder$ConverterSE.<init>(Unknown Source)
at sun.nio.cs.StreamEncoder.forOutputStreamWriter(Unknown Source)
at java.io.OutputStreamWriter.<init>(Unknown Source)
at com.kanq.web.servlet.GZIPResponseWrapper.getWriter(GZIPResponseWrapper.java:63)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:188)
at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:118)
at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:77)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:92)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.kanq.web.filter.GZIPFilter.doFilter(GZIPFilter.java:28)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.kanq.web.filter.ContentFilter.doFilter(ContentFilter.java:65)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.kanq.web.filter.InitFilter.doFilter(InitFilter.java:43)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.kanq.web.filter.EncodingFilter.doFilter(EncodingFilter.java:29)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:416)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:416)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)



public class GZIPResponseWrapper extends HttpServletResponseWrapper {
protected HttpServletResponse origResponse = null;
protected ServletOutputStream stream = null;
protected PrintWriter writer = null;

public GZIPResponseWrapper(HttpServletResponse response) {
super(response);
origResponse = response;
}

public ServletOutputStream createOutputStream() throws IOException {
return (new GZIPResponseStream(origResponse));
}

public void finishResponse() {
try {
if (writer != null) {
writer.close();
} else {
if (stream != null) {
stream.close();
}
}
} catch (IOException e) {
}
}

public void flushBuffer() throws IOException {
stream.flush();
}

public ServletOutputStream getOutputStream() throws IOException {
if (writer != null) {
throw new IllegalStateException("getWriter() has already been called!");
}

if (stream == null)
stream = createOutputStream();
return (stream);
}

public PrintWriter getWriter() throws IOException {
if (writer != null) {
return (writer);
}

if (stream != null) {
throw new IllegalStateException("getOutputStream() has already been called!");
}

stream = createOutputStream();
writer = new PrintWriter(new OutputStreamWriter(stream, this.getCharacterEncoding()));
return (writer);
}

public void setContentLength(int length) {
}


public class EncodingFilter implements Filter {
public void init(FilterConfig fc) throws ServletException {
}

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException,
ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
request.setCharacterEncoding(JupiterConfig.CHARSET);//就是UTF-8
response.setCharacterEncoding(JupiterConfig.CHARSET);
response.setContentType("text/html;charset='"+JupiterConfig.CHARSET+"'");

chain.doFilter(req, res);
}

public void destroy() {
}
}
...全文
23062 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
houjin_cn 2010-11-01
  • 打赏
  • 举报
回复 1
用这个代码试了一下:
String s="aaa";
s.getBytes("XXX");

抛得是 java.io.UnsupportedEncodingException: XXX
而你是 java.io.UnsupportedEncodingException: 'UTF-8'

所以, 应该是你的UTF-8多加了引号
shukewu 2010-11-01
  • 打赏
  • 举报
回复 1
[Quote=引用 2 楼 magong 的回复:]
上面报错是Servlet.service方法中的,底下你给的代码是过滤器的代码。搞混了?

另外,setContentType这一行UTF-8不需要单引号括住的。[/Quote]

谢谢了,就是这个问题,才记得就是加了这行代码之后就报的错。把那个改了一下就好了。
shukewu 2010-11-01
  • 打赏
  • 举报
回复 1
[Quote=引用 1 楼 simaa0106 的回复:]
感觉你这问题就跟MyEclipse里面在不支持特定编码的页面使用特定编码一样。

目标文件设置编码了没?目标文件的编码是不是UTF-8?
[/Quote]
这个编码没有设置,刚开始是没有问题的,不知道最后加了那些代码之后就开始报这个错误了。
magong 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 shukewu 的回复:]
2010-11-1 10:28:27 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
java.io.UnsupportedEncodingException: 'UTF-8'
at sun.io.Converters.getC……

request.setCharacterEncoding(JupiterConfig.CHARSET);//就是UTF-8
response.setCharacterEncoding(JupiterConfig.CHARSET);
response.setContentType("text/html;charset='"+JupiterConfig.CHARSET+"'");
[/Quote]
上面报错是Servlet.service方法中的,底下你给的代码是过滤器的代码。搞混了?

另外,setContentType这一行UTF-8不需要单引号括住的。
simaa0106 2010-11-01
  • 打赏
  • 举报
回复
感觉你这问题就跟MyEclipse里面在不支持特定编码的页面使用特定编码一样。

目标文件设置编码了没?目标文件的编码是不是UTF-8?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧