奇怪的情况在这里。
我有一个支持UTF-8字符的Java Web应用程序。即他们显示并可以在应用程序中输入
我还有另一个应用程序访问上一个应用程序,如下面的基本代码段
final URL urlObject = new URL("someurlyadayada");
final URLConnection connection = urlObject.openConnection();
...
....
connection.connect();
final InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is,"UTF8");
final OutputStream out = new FileOutputStream(new File(somelocalfile));
OutputStreamWriter osw = new OutputStreamWriter(out,"UTF8");
int read = 0;
while ((read = isr.read()) != -1) {
osw.write(read);
}
....
当在浏览器中查看给定页面时,所有内容都会呈现精细的UTF-8字符。但是当使用上面的代码片段被破坏时,要么以 ??????? 或只是错误的字符返回。
到目前为止,我所尝试的是在输入/输出流编写器上以及应用程序中的请求和响应对象上将编码设置为UTF-8。
这部分适用于给定具有以下行的JPS
Прочтено Прочтено,Прочтено,
<%=someJavaMethodWhichReturnsTheAboveLineAlso()%>
在浏览器中,这可以很好地呈现:
ПрочтеноПрочтено,Прочтено,
ПрочтеноПрочтено,Прочтено,
但是使用页面解析器将返回
- - - - - - - - - - - - - - - - - - -
ПрочтеноПрочтено,Прочтено,
如果我在我的所有页面JSP之上设置contentType="text/html;charset=UTF-8"
它修复了这两个问题,但是高层人员告诉我,更新100个JSP是不可能的。
我也得到的印象是我应该能够设置一次并将其用作默认值。
这里的最佳做法是什么。关于在JSP上设置内容,我有两种想法。不确定这样做是否错误,或者我们从来没有做过错误。
我已经很好地了解了解决方案并取得了不同的成功
答案 0 :(得分:0)
您可以在web.xml文件中为所有JSP配置默认字符编码,这是全局完成的
public class CharsetFilter
implements Filter {
String encoding = "UTF-8";
public void destroy() {
/* Do nothing */
}
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {
response.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
public void init(FilterConfig config) throws ServletException {
}
}
你还可以做的是创建一个过滤器来设置响应字符编码(最终是内容类型),如下所示:(在示例下面进行字符编码)
<filter>
<filter-name>
charsetFilter
</filter-name>
<filter-class>
your.filter.package.CharsetFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>charsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然后在web.xml文件中定义过滤器
$ sudo service docker status
请注意,我将过滤器应用于使用任何Web应用资源的/ *。如果您希望过滤器影响每个Web资源,这可能很方便
希望你能解决这个问题