1. 程式人生 > >node——6-響應資料型別 Content-Type(解決中文亂碼)

node——6-響應資料型別 Content-Type(解決中文亂碼)

  • 在服務端預設傳送的資料,其實是 utf-8 編碼的內容,但是瀏覽器不知道你是 utf-8 編碼的內容
  • 瀏覽器在不知道伺服器響應內容的編碼的情況下會按照當前作業系統的預設編碼去解析
  • 中文作業系統預設解析是 gbk
  • 解決方法就是正確的告訴瀏覽器傳送的編碼格式,在 http 協議中,Content-Type 就是用來告訴對方傳送資料內容的型別
let http = require('http');

var server = http.createServer();

server.on('request', function (req, res) {
// 在服務端預設傳送的資料,其實是 utf-8 編碼的內容 // 但是瀏覽器不知道你是 utf-8 編碼的內容 // 瀏覽器在不知道伺服器響應內容的編碼的情況下會按照當前作業系統的預設編碼去解析 // 中文作業系統預設解析是 gbk // 解決方法就是正確的告訴瀏覽器傳送的編碼格式 // 在 http 協議中,Content-Type 就是用來告訴對方傳送資料內容的型別 // res.setHeader('Content-Type', 'text/plain; charset=utf-8'); // res.end('你好,世界!'); let url =
req.url; if (url === '/plain') { // text/plain 就是普通文字 res.setHeader('Content-Type', 'text/plain; charset=utf-8'); res.end('hello 世界 <p>hello 世界</p>'); } else if (url === '/html') { // 如果你傳送的是 html 格式的字串,請用 text/html res.setHeader('Content-Type'
, 'text/html; charset=utf-8'); res.end('hello 世界 <p>hello 世界</p>'); } }); server.listen(3000, function () { console.log('Server is running...'); });

在這裡插入圖片描述

Content-Type 協議型別查詢

  1. 結合 fs 傳送檔案中的資料
  2. Content-Type
    不同的資源對應的 Content-Type 是不一樣的
    圖片不需要指定編碼,一般只為字元資料指定編碼
let http = require('http');
let fs = require('fs');

let server = http.createServer();

server.on('request', function (req, res) {
    let url = req.url;

    if (url === '/') {
        // 要傳送的是在檔案中的內容
        fs.readFile('./test-resource/index.html', function (err, data) {
            if (err) {
                res.setHeader('Content-Type', 'text/plain; charset=utf-8');
                res.end('檔案讀取失敗');
            } else {
                // data 預設是二進位制資料,可以通過 .toString 轉為咱們能識別的字串
                // res.end() 支援兩種資料型別,一種是二進位制,一種是字串
                res.setHeader('Content-Type', 'text/html; charset=utf-8');
                res.end(data);
            }
        })
    }else if(url==='/pic.jpg'){
        // url:統一資源定位符
        // 一個 url 最終其實是要對應到一個資源的
        fs.readFile('./test-resource/pic.jpg', function (err, data) {
            if (err) {
                res.setHeader('Content-Type', 'text/plain; charset=utf-8');
                res.end('檔案讀取失敗');
            } else {
                // data 預設是二進位制資料,可以通過 .toString 轉為咱們能識別的字串
                // res.end() 支援兩種資料型別,一種是二進位制,一種是字串
                // 圖片就不需要編碼了,常說的編碼一般指的是:字元編碼
                res.setHeader('Content-Type', 'image/jpeg');
                res.end(data);
            }
        })
    }
});

server.listen(3000, function () {
    console.log('Server is running...');
});

在這裡插入圖片描述

補充

  1. 除了 Content-Type 可以用來指定編碼,也可以在 HTML 頁面中通過 meta 元資料來聲明當前文字的編碼格式,瀏覽器也會識別它。
    例如:<meta charset="UTF-8">