Node.js第一份代码中文乱码之分析

本文讲述了作者在学习Node.js过程中遇到的中文乱码问题,通过官网教程运行代码出现乱码,分析了问题的根本原因是文件头字符集未设置为UTF-8。作者探讨了两种解决方法:setHeader和writeHead,并对比了它们的使用。最后,提供了正确设置字符集的代码示例,建议Node.js官方更新教程以避免新手遇到此类问题。
摘要由CSDN通过智能技术生成

初识Node.js

听说Node.js性能优越,在serverless大趋势下,突然有了想学学Node.js的心情,从哪开始比较好呢,本想百度,但还是想系列的了解下,于是就找到了Node.js官网教程

运行第一份代码

看到代码,就想运行看看是不是真的如此,正好之前本地安装过Node.js,还是有点小期待,这么少的代码就搭建了一个服务

`const http = require('http')

const hostname = '127.0.0.1'
const port = 3000

const server = http.createServer((req, res) => {
  res.statusCode = 200
  res.setHeader('Content-Type', 'text/plain')
  res.end('你好世界\n')
})

server.listen(port, hostname, () => {
  console.log(`服务器运行在 http://${hostname}:${port}/`)
})`

打开HBuilderX,新建main.js,复制粘贴代码、保存、运行
在这里插入图片描述

打开Chrome浏览器,输入:http://127.0.0.1:3000/
在这里插入图片描述
这是什么鬼啊,以为复制错了或漏了步骤,回官网仔细查看,发现确实没有漏步骤!

头痛的中文代码,乱象众生

刚开始以为是Chrome代码查看设置的问题,但发现并不是,最终确定应该是编码的问题,百度一下,果然有一堆人都遇到同样的问题,打开一些博文,拷贝、粘贴博文中的代码后,发现没有了乱码的问题。对于网页编程几乎零基础的我来说,虽然文章中都找到问题并解决了,但说的并不是很清楚,我还是希望能弄明白,原来的代码为什么有问题,如何最快解决。根本原因:文件头的字符集没有设置成utf-8。
解决这个问题有二种:

  1. setHeader
  2. writeHead
    刚开始接触网页编程,对这二个方法的了解,基本上零啊,直接拷贝相应的部分的代码,发现居然不行,我的上帝,这是什么情况,一头懵
    先看看一些人的解决方法:
    其一:
var http = require('http');
 
http.createServer(function(req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write('<head><meta charset="utf-8"/></head>');
  res.write('<h1>Node.js</h1>');
  res.write('<b>亲爱的,你慢慢飞,小心前面带刺的玫瑰...</b>');
  res.end('<p>Hello World</p>');
  
}).listen(3000);
 
console.log("HTTP server is listening at port 3000.");

这个代码能解决乱码问题,但代码不清晰,不易理解!不是说head没有指定utf-8字符集吗?为什么不在writeHead的时候指定呢?

其二:

var http = require('http');
var dt = require('./DateModule')
http.createServer(function(req, res){
	res.writeHeader(200, {'Content-Type' : 'text/html;charset:utf-8'
	});
	res.write('<head><meta charset="utf-8"/></head>'); 
	res.write("The date and time are currently: " + dt.myDateTime());
	res.end('Hello world! 你好');
}).listen(8080);

这个writeHeader里已经指定utf-8字符集,后面还要write一次做什么呢,其作用是什么呢?

这些代码的博文链接就不贴出来了,不知道写博文的人是什么个情况

解决办法

回到这个问题上来,要解决这个问题,字符集就要设置正确,既然有二种方法,那究竟该如何设置呢,最后查找相关文档,找到了答案!

  1. 方法一:setHeader
    这个方法是一次设置一个文件头属性
  2. 方法二:writeHead
    这个是一次可以设置多个文件头属性
    但这里只是对一个属性进行设置:Content-Type

直粘代码:

const server = http.createServer((req, res) => {
    res.statusCode = 200
    res.setHeader('Content-Type', 'text/html;charset=utf-8')
    res.end('你好世界\n')
})
const server = http.createServer((req, res) => {
    res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});
    res.end('你好世界\n')
})

Node.js这个教程应该进行更新了,贴出来的代码居然运行不出来正确的代码,这把刚想学的小白挡在门口!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值