HTML 编码字符集优先级探究

http和html都有多处地方可以指定字符集,本文探究各个配置的优先级

HTML 字符集的指定有三个地方:

  1. http 头部

    如:Content-Type: text/html; charset=utf8

  2. html 头部 meta charset

    如:

  3. html 头部 meta http-equiv=”Content-Type”

    如:

优先级的探究

  1. NodeJS 服务器代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
const net = require('net');

// 创建 TCP 服务器
const server = net.createServer((socket) => {
// 处理连接
socket.on('data', (data) => {
// 解析 HTTP 请求
const request = data.toString();
console.log('Received request:');
console.log(request);

// 构造 HTTP 响应
const responseBody = '<html><head><meta charset="UTF-8"/><meta http-equiv="Content-Type" content="text/html; charset=gbk"/></head><body><h1>Hello, World! 你好世界!</h1></body></html>';
const responseHeaders = 'HTTP/1.1 200 OK\r\nContent-Type: text/html;\r\n\r\n';
const responseBuffer = Buffer.from(responseHeaders + responseBody, 'utf8');

// 发送 HTTP 响应
socket.write(responseBuffer, () => {
// 结束连接
socket.end();
});
});
});

// 监听特定端口
const PORT = 3000;
server.listen(PORT, () => {
console.log(`Server listening on port ${PORT}`);
});

优先级结论

优先级从高到低排列

http 头部 -> html 头部 meta charset -> html 头部 meta http-equiv=”Content-Type”