node.js จะมีปัญหารหัสที่อ่านไม่ออกเมื่อคลานหน้าเว็บจีนที่ไม่ใช่ UTF-8 ตัวอย่างเช่นการเข้ารหัสหน้าแรกของ NetEase คือ GB2312 และรหัสที่อ่านไม่ออกจะมีรหัสที่อ่านไม่ออกเมื่อคลาน
การคัดลอกรหัสมีดังนี้:
คำขอ var = ต้องการ ('คำขอ')
var url = 'http://www.163.com'
คำขอ (url, ฟังก์ชั่น (err, res, body) {
console.log (ร่างกาย)
-
คุณสามารถใช้ iconv-lite เพื่อแก้ปัญหา
ติดตั้ง
การคัดลอกรหัสมีดังนี้:
NPM Iconv-lite
ในเวลาเดียวกันเราจะแก้ไขตัวแทนผู้ใช้เพื่อป้องกันไม่ให้เว็บไซต์ปิดกั้น:
การคัดลอกรหัสมีดังนี้:
var OriginreQuest = ต้องการ ('คำขอ')
var iconv = reghed ('iconv-lite')
ส่วนหัว var = {
'ผู้ใช้ตัวแทน': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) Applewebkit/537.36 (khtml, เช่น Gecko) Chrome/39.0.2171.65 Safari/537.36'
-
คำขอฟังก์ชัน (URL, callback) {
ตัวเลือก var = {
URL: URL
การเข้ารหัส: null,
ส่วนหัว: ส่วนหัว
-
Originrequest (ตัวเลือกการโทรกลับ)
-
คำขอ (url, ฟังก์ชั่น (err, res, body) {
var html = iconv.decode (body, 'GB2312')
console.log (html)
-
แก้ปัญหาที่อ่านไม่ออก
ใช้ Cheatio เพื่อแยกวิเคราะห์ HTML
Cheerio สามารถเข้าใจได้ง่ายและคร่าวๆว่าเป็นตัวเลือก jQuery ฝั่งเซิร์ฟเวอร์ ด้วยมันมันใช้งานง่ายกว่าปกติมาก
ติดตั้ง
การคัดลอกรหัสมีดังนี้:
NPM ติดตั้งชีส
คำขอ (url, ฟังก์ชั่น (err, res, body) {
var html = iconv.decode (body, 'GB2312')
var $ = cheeseio.load (html)
console.log ($ ('h1'). text ())
console.log ($ ('h1'). html ())
-
ผลลัพธ์มีดังนี้
การคัดลอกรหัสมีดังนี้:
ทำให้เสีย
ทำให้เสีย
ดังนั้นคำถามคือเอาต์พุตรหัสโดย $ ('H1') HTML () คือการเข้ารหัส Unicode และ NetEase ได้กลายเป็น netEase ซึ่งทำให้เกิดปัญหาในการประมวลผลอักขระของเรา
แก้ปัญหา "อ่านไม่ออก" ใน cheatio.html ()
เมื่อดูที่เอกสารคุณสามารถปิดฟังก์ชั่นของการแปลงการเข้ารหัสเอนทิตี
การคัดลอกรหัสมีดังนี้:
var $ = cheeseio.load (html)
เปลี่ยน
การคัดลอกรหัสมีดังนี้:
var $ = cheeseio.load (html, {decodeentities: false})
ถูกต้องรหัสที่สมบูรณ์มีดังนี้:
การคัดลอกรหัสมีดังนี้:
var OriginreQuest = ต้องการ ('คำขอ')
var cheeseio = ต้องการ ('cheerio')
var iconv = reghed ('iconv-lite')
ส่วนหัว var = {
'ผู้ใช้ตัวแทน': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) Applewebkit/537.36 (khtml, เช่น Gecko) Chrome/39.0.2171.65 Safari/537.36'
-
คำขอฟังก์ชัน (URL, callback) {
ตัวเลือก var = {
URL: URL
การเข้ารหัส: null,
ส่วนหัว: ส่วนหัว
-
Originrequest (ตัวเลือกการโทรกลับ)
-
var url = 'http://www.163.com'
คำขอ (url, ฟังก์ชั่น (err, res, body) {
var html = iconv.decode (body, 'GB2312')
var $ = cheeseio.load (html, {decodeentities: false})
console.log ($ ('h1'). text ())
console.log ($ ('h1'). html ())
-