2016-01-24 27 views
2

我有以下的角度工厂,职位要求到一个servlet(TOMCAT),在其反过来,访问DB发送/检索数据:Angular http后非拉丁字符转换为?

MyApp.factory('DB_Services', function($http , $q) { 
var l_Result ; 
var DB_Services = function(p_Query) { 
         var l_deferred = $q.defer(); 
         var l_url  = "http://localhost:8080/Services/Dispatcher?"; 
         var l_params = 'request=' + JSON.stringify(p_Query) ; 

         console.log("DB_Services - l_params is: " + l_params) ; 

         var req = { url: l_url, method:"POST", headers: { 'Content-Type': 'application/x-www-form-urlencoded' 
                     }, data: l_params 
            } ; 
         console.log("DB_Services - req is: " + JSON.stringify(req) ) ; 

         $http(req). 
            success(function(data, status, headers, config) { 
             console.log("DB_Services - Success; data is: " + JSON.stringify(data)) ; 
             l_deferred.resolve(data); 
            }). 
            error(function(data, status, headers, config) { 
             console.log("DB_Services - Error: " + data) ; 
             l_deferred.reject(status); 
            }); 
            return l_deferred.promise; 

        } ; 

return DB_Services; 
}); 

的函数是“几乎”完美,而唯一的问题(至少现在)非拉丁字符返回为“?”。我检查了TOMCAT日志,在该日志中打印从DB中检索的内容并将其发回给客户端,并且所有非拉丁字符都显示为OK。

我想我错过告诉Angular/HTTP,响应是一个UTF-8字符编码的JSON。如果我的猜测是正确的,我该如何添加这些信息?

在此先感谢。

+0

你在页面的head标签中是否有这一行:''? –

+0

是的,我有。也许这会更关注我的问题。最初,在开始与数据库集成之前,我手动填充了所有语言的JSON,并显示OK。它看起来问题在于HTTP-POST处理聊天集。 – FDavidov

+0

默认情况下,XmlHttpRequest使用'utf-8'。听起来像是服务器端或数据库问题 – charlietfl

回答

0

好的。我找到了问题并解决了。我需要做的唯一一件事就是Servlet的doPost方法函数中添加以下行:

request.setCharacterEncoding("UTF-8"); 

一旦这样做,我现在收到正确的字符的所有字符串(西里尔文,中国,阿拉伯等) 。

感谢this guy发布他的解决方案!