2016-01-24 53 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發佈他的解決方案!