为Java Web应用程序中的所有JSP设置默认字符编码
这里的情况很奇怪 我有一个支持UTF-8字符的Java Web应用程序。也就是说,它们可以显示并输入到应用程序中 我还有另一个应用程序,它访问上一个应用程序,如下面的基本代码段所示为Java Web应用程序中的所有JSP设置默认字符编码,java,jsp,utf-8,character-encoding,tomcat7,Java,Jsp,Utf 8,Character Encoding,Tomcat7,这里的情况很奇怪 我有一个支持UTF-8字符的Java Web应用程序。也就是说,它们可以显示并输入到应用程序中 我还有另一个应用程序,它访问上一个应用程序,如下面的基本代码段所示 final URL urlObject = new URL("someurlyadayada"); final URLConnection connection = urlObject.openConnection(); ... .... connection.connect(); final
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()%>
,
在浏览器中,这将精细渲染为:
Пииииииииииииииииииииииииии,Пиииии59
Пииииииииииииииииииииииииии,Пиииии59
但是使用页面解析器将返回
о¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
Пииииииииииииииииииииииииии,Пиииии59
如果我将contentType=“text/html;charset=UTF-8”
设置在我所有页面的JSP之上,它可以解决这两个问题,但上级告诉我,更新100个JSP以实现这一点是不可能的
我还得到这样的印象,这是我应该能够设置一次,并使用它作为默认值
这里的最佳实践是什么。关于在JSP上设置内容,我有两种想法。不确定这样做是错误的,还是我们一开始就没有这样做是错误的
我已经仔细研究了各种解决方案,并且取得了不同的成功您可以为web.xml文件上的所有JSP配置默认字符编码,这样就可以在全局范围内完成
<jsp-config>
<jsp-property-group id="defaultUtf8Encoder">
<url-pattern>*.jsp</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
然后在web.xml文件中定义过滤器
<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>
字符集过滤器
您的.filter.package.CharsetFilter
字符集过滤器
/*
请注意,我正在对使用任何web应用程序资源的/*应用筛选器。如果您希望过滤器影响每一个web资源,这可能很方便
希望这能帮您解决问题您可以为web.xml文件上的所有JSP配置默认字符编码,这样就可以在全局范围内完成
<jsp-config>
<jsp-property-group id="defaultUtf8Encoder">
<url-pattern>*.jsp</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
然后在web.xml文件中定义过滤器
<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>
字符集过滤器
您的.filter.package.CharsetFilter
字符集过滤器
/*
请注意,我正在对使用任何web应用程序资源的/*应用筛选器。如果您希望过滤器影响每一个web资源,这可能很方便
希望这能帮你解决问题删除了我之前的评论。除了我的其他更改(输入/输出流似乎确实在工作。我忘了我在其他地方添加了试图设置内容类型的代码。一旦我删除了代码,它就工作了。删除了我以前的注释。这是我的其他更改之外的(输入/输出流似乎确实在工作。我忘了我在其他地方添加了试图设置内容类型的代码。一旦我删除了代码,它就工作了。