为Java Web应用程序中的所有JSP设置默认字符编码

为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

这里的情况很奇怪

我有一个支持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()%>
在浏览器中,这将精细渲染为:

Пииииииииииииииииииииииииии,Пиииии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资源,这可能很方便


希望这能帮你解决问题

删除了我之前的评论。除了我的其他更改(输入/输出流似乎确实在工作。我忘了我在其他地方添加了试图设置内容类型的代码。一旦我删除了代码,它就工作了。删除了我以前的注释。这是我的其他更改之外的(输入/输出流似乎确实在工作。我忘了我在其他地方添加了试图设置内容类型的代码。一旦我删除了代码,它就工作了。