使用 cheerio 时有没有出现过乱码的情况 Nodejs

使用 cheerio 时有没有出现过乱码的情况 Nodejs

https://github.com/MatthewMueller/cheerio

有没有出现过中文乱码的。

 <meta name="keywords" content="&#x4E50;&#x8DA3;&#xFF01;!">

我自己用的时候会出现 一些中文 转为unicode


6 回复

当然,在使用 cheerio 处理网页数据时,可能会遇到乱码问题。这通常是因为编码不正确导致的。下面我会展示如何正确处理编码问题,并提供一个简单的示例代码来解决这个问题。

为什么会出现乱码?

乱码通常是由于字符编码不一致导致的。例如,网页的原始编码可能是 UTF-8,但读取或解析过程中没有正确识别这种编码,就会导致中文字符显示为乱码。

如何解决乱码问题

解决乱码问题的关键在于确保在整个处理过程中都使用正确的编码。以下是一些步骤和示例代码,可以帮助你正确处理编码问题:

  1. 设置正确的编码:在读取网页内容时,确保使用正确的编码。
  2. 使用 cheerio 解析页面:确保在解析 HTML 时,已经正确设置了编码。
  3. 输出结果时保持一致性:确保输出的结果也是使用相同的编码。

示例代码

假设你有一个网页内容包含中文字符,你可以通过以下方式正确解析并避免乱码:

const axios = require('axios');
const cheerio = require('cheerio');

// 获取网页内容
async function fetchPage(url) {
    const response = await axios.get(url, {
        responseType: 'text',
        headers: {
            'Accept-Encoding': 'identity'
        }
    });
    return response.data;
}

// 解析网页内容
async function parseHtml(url) {
    const htmlContent = await fetchPage(url);
    const $ = cheerio.load(htmlContent);

    // 打印 meta 标签的内容
    const keywords = $('meta[name="keywords"]').attr('content');
    console.log(keywords);  // 输出:乐购!
}

parseHtml('http://example.com');  // 替换为你实际的 URL

解释

  1. fetchPage 函数:使用 axios 库获取网页内容。这里指定了 responseType: 'text''Accept-Encoding': 'identity' 来确保文本内容以原始形式返回,而不是被压缩或解码。
  2. parseHtml 函数:使用 cheerio.load 加载 HTML 内容。这里不需要特别指定编码,因为 axios 已经确保了文本内容是以正确的编码返回的。
  3. 打印结果:从 HTML 中提取 meta 标签的内容并打印到控制台。

通过这种方式,可以有效避免在使用 cheerio 解析 HTML 时出现的乱码问题。希望这个示例对你有所帮助!


主要是title 和 alt属性这些 会编程 unicode 编码,,求助。

var $ = cheerio.load(htmlStr, {decodeEntities: false});

先转码吧。

true-html-escape 不谢:https://www.npmjs.com/package/true-html-escape

var escaper = require("true-html-escape");

escaper.escape(“¤¥€”); ///<= &curren;&yen;&euro; escaper.unescape("&lt;span&gt;&#29579;&#23612;&#29595;&lt;/span&gt;"); ///<= <span>王尼玛</span> escaper.unescape("&#12501;&#12521;&#12531;&#12489;&#12540;&#12523;"); ///<= フランドール escaper.unescape("(&#x256d;&#xffe3;3&#xffe3;)&#x256d;&#x2661;") ///<= (╭ ̄3 ̄)╭♡

cheerio = Fast, flexible, and lean implementation of core jQuery designed specifically for the server.

有点意思

在使用 cheerio 解析 HTML 时,如果遇到中文乱码问题,通常是由于编码不一致或数据源中的字符编码问题。为了确保解析过程中不出现乱码,我们需要在抓取数据时正确处理字符编码。

以下是一个简单的示例,展示如何在使用 axios 抓取网页内容后,通过 cheerio 正确解析并显示中文字符:

const axios = require('axios');
const cheerio = require('cheerio');

axios.get('https://example.com')
  .then(response => {
    const $ = cheerio.load(response.data, { decodeEntities: false });
    const keywords = $('meta[name="keywords"]').attr('content');
    console.log(keywords); // 输出正常的中文字符
  })
  .catch(error => {
    console.error(error);
  });

在这个例子中:

  • 使用 axios 来获取网页内容。
  • 使用 cheerio 加载内容,并设置 decodeEntities 选项为 false,这样可以避免将 HTML 实体自动解码成 Unicode 编码。
  • 获取 <meta> 标签的 content 属性值,并输出到控制台。

通过这种方式,我们可以有效地避免乱码问题,确保中文字符能够正常显示。如果仍然存在乱码问题,请检查网页原始数据的编码格式是否与你的解析逻辑匹配。

回到顶部