1. 程式人生 > >HTTP 請求中文處理要點

HTTP 請求中文處理要點

開門見山。
我在使用AngularJS+NodeJS,遇到了好幾個中文字元亂碼的問題。
1. HTML檔案沒有寫charset,導致HTML檔案中的中文在瀏覽器中顯示為亂碼。


2. URL含有中文引數。
http://www.utopia-project.com/albums/edit/?album=那年7月
這裡的中文引數值,在client端的JS中拼裝:
$http({
url: ‘/upload/?album=’ + albumName,
method: ‘GET’,
headers: {‘Content-Type’: ‘application/x-www-form-encoded;charset=UTF-8’}

上面的程式碼,在Chrome和Safari上都沒有問題。但是在IE上,後臺獲取道的album值為亂碼。
解決這個問題的方法是,將上面的程式碼修改為:
$http({
url: ‘/upload/?album=’ + encodeURIComponent(albumName),
method: ‘GET’,
headers: {‘Content-Type’: ‘application/x-www-form-encoded;charset=UTF-8’}

3. NodeJS接受資料。
NodeJS中接受資料,需要設定字符集為UTF-8。
function signin(request, response){
var loginData = ”;

request.setEncoding(“utf8”);
request.on(“data”, function(data){
loginData += data;
});

4. 中文Cookie值。
Cookie中儲存中文,通過AngularJS的ngCookie服務取出來的時候,是亂碼。
存:
response.cookie(‘authInfo_name’, authInfo.name, {maxAge: cookieMaxAge});
取:
angular.module(‘signinApp’, [‘ngCookies’]);

$cookies.authInfo_name
上面的方式,antuinfo.name取出來的值為亂碼。設定過字符集也無效。
想了一個變通的方法,將Cookie值Base64編碼。
存:
response.cookie(‘authInfo_name’, toBase64(authInfo.name), {maxAge: cookieMaxAge});
取:
Base64.decode($cookies.authInfo_teacherName)