前言:为什么中文会在浏览器中乱码?
- 在服务器默认发送的数据,其实是utf-8编码的内容
- 但是浏览器不知道你是utf-8编码的内容
- 浏览器在不知道服务器响应内容的编码的情况下会按照当前操作系统的默认编码去解析
- 中文操作系统默认是gbk
- 解决方法就是正确的告诉浏览器我给你发送的内容是什么编码的
解决方法:
- 加上响应类型Content-Type
var http = require('http')
var server = http.createServer()
server.on('request',function(req,res){
res.setHeader('Content-Type','text/plain;charset=utf-8')
res.end('hello 今年过节不收礼')
})
server.listen(3000,function(){
console.log('服务已经启动')
})
没加响应类型:
加了响应类型:
Content-Type
- 在http协议中,Content-Type就是用来告知对方我给你发送的数据内容是什么类型
var http = require('http')
var server = http.createServer()
server.on('request',function(req,res){
// res.setHeader('Content-Type','text/plain;charset=utf-8')
// res.end('hello 今年过节不收礼')
var url = req.url
if(url === '/text'){
//text/plain就是普通文本
res.setHeader('Content-Type','text/plain;charset=utf-8')
res.end('hello 今年过节不收礼')
}else if(url === '/html'){
//如果你发送的是HTML格式的字符串,也要告诉浏览器给你发送的是HTML格式的字符串
res.setHeader('Content-Type','text/html;charset=utf-8') //解析HTML标签
res.end('<p>hello 今年过节不收礼<a href="">点我</a></p>')
}
})
server.listen(3000,function(){
console.log('服务已经启动')
})
-
具体的类型可查看文档
Content-Type+fs的使用
var http = require('http')
var fs = require('fs')
var server = http.createServer()
server.on('request',function(req,res){
var url = req.url
if(url === '/'){
//用fs读取html文件
//若html文件修改了,但是却不需要重启服务,fs会动态的更新
fs.readFile('./resource/index.html',function(err,data){
if(err){
res.setHeader('Content-Type','text/plain;charset=utf-8')
res.end('文件读取失败,请稍后重试!')
}else{
res.setHeader('Content-Type','text/html;charset=utf-8')
res.end(data)
}
})
}else if(url === '/sea'){
fs.readFile('./resource/main.jpg',function(err,data){
if(err){
res.setHeader('Content-Type','text/plain;charset=utf-8')
res.end('文件读取失败,请稍后重试!')
}else{
//图片就不需要指定编码了,因为我们常说的编码一般指的是:字符编码
res.setHeader('Content-Type','image/jpeg')
res.end(data)
}
})
}
})
server.listen(3000,function(){
console.log('服务已经启动')
})
- 不同的资源对应的Content-Type是不一样的
- 图片不需要指定编码
- 一般只为字符数据才指定编码(uft-8)
通过网络发送文件
- 发送的并不是文件,本质上来讲发送的是文件的内容