Angularjs 在Tomcat上读取UTF-8请求的问题

Angularjs 在Tomcat上读取UTF-8请求的问题,angularjs,tomcat,encoding,utf-8,Angularjs,Tomcat,Encoding,Utf 8,我有一个AngularJS应用程序试图向部署在Tomcat7.0.54中的Java后端提交表单。我的AngularJS应用程序似乎正在正确提交表单。这是Chrome检查员记录的内容类型标题: 内容类型:application/json;字符集=UTF-8 Chrome检查员再次记录的请求有效负载为: {"newProject":{"title":"título","deadline":"30/Maio/2014", ..... 也就是说,AngularJS应用程序正在将请求正确地连接起来。但是

我有一个AngularJS应用程序试图向部署在Tomcat7.0.54中的Java后端提交表单。我的AngularJS应用程序似乎正在正确提交表单。这是Chrome检查员记录的内容类型标题:

内容类型:application/json;字符集=UTF-8

Chrome检查员再次记录的请求有效负载为:

{"newProject":{"title":"título","deadline":"30/Maio/2014", .....
也就是说,AngularJS应用程序正在将请求正确地连接起来。但是,我无法在服务器端正确读取此有效负载。像“í”这样的字符被打印为“?”

为了测试,我修改了链中的第二个过滤器(第一个是Spring Security),用于打印请求的内容。这是为了确保我的服务器端应用程序和我正在使用的任何框架都不会干扰我的数据

@Override
    public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException {
        try {
            HttpServletRequest hsr = (HttpServletRequest)request;
            if( "POST".equalsIgnoreCase( hsr.getMethod() ) && "http://localhost:8080/profile/createproject".equalsIgnoreCase( hsr.getRequestURL().toString() ) ) {
                hsr.setCharacterEncoding( "UTF-8" );
                BufferedReader reader =  new BufferedReader( new InputStreamReader( request.getInputStream(), "UTF-8" ) );
                System.out.println( reader.readLine() );
            }

            chain.doFilter( request, response );

        } finally {
            MDC.remove( CHAVE_ID_REQUEST );

        }
    }
即使在链的第二个过滤器中读取请求,我也会得到“t?tulo”而不是“título”。如果同一AngularJS应用程序提交到一个节点后端,那么有效负载将在终端中正确读取和打印


有人对Tomcat无法正确读取我的UTF-8请求的原因有任何疑问吗?

似乎您已经解决了您的特定问题,但想补充一点,这类问题的一个关键参考是, 这在中引用


特别是,我可以通过在server.xml中的
中设置
URIEncoding=“UTF-8”
来解决类似的问题。

您确定System.out.println()会在您的系统上正确呈现UTF-8吗?如果您直接读取输入流(正如您所做的),Tomcat只会传递字节。它不知道也不关心正在使用的字符集。很好。今天早上,我在linux机器上测试了完全相同的代码,一切都按预期进行。所以,我回到了我的OSX盒子,在那里问题发生了,我试着做一些研究来了解什么是错误的,因为这个问题几天前还不存在。我在OSX上找到了很多关于java编码问题的参考资料。我尝试了一些没有任何效果的改变。我上一次尝试是在Eclipse的配置中,将默认工作区编码从默认的ASCII更改为UTF-8,现在一切又正常了。谢谢你的提示!