我在Grails运行的Grails webapp中遇到了一个奇怪的问题:
由于各种未知的编码字符串(例如java.io.UnsupportedEncodingException
,"ISO8859_10"
), "ISO-8859-10"
经常被抛出,奇怪的是这完全是在Resin和Grails代码中完成的。也就是说 - 抛出异常时不会涉及自定义代码。
我不确定它是Grails还是应该处理异常的servlet容器的代码。但我认为异常应该在某个地方处理,而不是一直冒到stderr。
这是完整的例外:
java.io.UnsupportedEncodingException: ISO-8859-10
at com.caucho.vfs.i18n.JDKWriter$OutputStreamEncodingWriter.<init>(JDKWriter.java:112)
at com.caucho.vfs.i18n.JDKWriter.create(JDKWriter.java:79)
at com.caucho.vfs.Encoding.getWriteEncoding(Encoding.java:231)
at com.caucho.server.connection.ToByteResponseStream.setEncoding(ToByteResponseStream.java:137)
at com.caucho.server.connection.AbstractHttpResponse.setLocale(AbstractHttpResponse.java:1683)
at com.caucho.server.connection.HttpServletResponseImpl.setLocale(HttpServletResponseImpl.java: 115)
at javax.servlet.ServletResponseWrapper.setLocale(ServletResponseWrapper.java:139)
at javax.servlet.ServletResponseWrapper.setLocale(ServletResponseWrapper.java:139)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1035)
at org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet.doDispatch(GrailsDispatcherServlet.java:290)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:114)
我的问题:
答案 0 :(得分:2)
我对Grails不太了解,但也许你可以试着找出这个奇怪的编码来自哪里。
您的请求是否发送了Accept-Charset标头? 如果在resin.conf中将“file.encoding”系统属性设置为有意义的UTF-8,事情会更好吗?
答案 1 :(得分:0)
您还可以在应用程序上下文中设置localeResolver
bean。 DispatcherServlet
将使用它来解析区域设置。我自己没有尝试过,但我的建议是使用org.springframework.web.servlet.i18n.FixedLocaleResolver
。如果您没有任何设置,它将委托给Locale.getDefault()
。