gpt4 book ai didi

node.js - 解码特殊西里尔字母

转载 作者:行者123 更新时间:2023-12-02 18:06:51 24 4
gpt4 key购买 nike

当运行以下小片段时,我们在终端中看到奇怪的字符:

const http = require("http")
http.get("http://www.pravda.com.ua/news/2017/10/6/7157464/", res => {
res.on("data", e => console.log(e.toString()))
})

...如:��������� ���

为什么会发生这种情况?做的时候curl http://www.pravda.com.ua/news/2017/10/6/7157464/ ,我们得到原始问号(例如: <title>? ? | ?? </title> )。

但是,浏览器似乎获得了良好的字符 <title>У Кахов...</title> .

是服务器发送不同的内容还是客户端解释内容的方式不同(Node.js、curl 和浏览器)?

最佳答案

您请求的网站使用 Windows-1251 编码,NodeJS 不支持这种编码:

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

除了 cURL 和原始 NodeJS 请求器之外,浏览器足够聪明,可以检测到这一点并正确解释。因此,基本上,您需要一个第三方模块来转换编码,例如 iconv-lite :

const http = require("http");
const iconv = require("iconv-lite");

http.get("http://www.pravda.com.ua/news/2017/10/6/7157464/", (res) => {
res.pipe(iconv.decodeStream("win1251")).collect((err, body) => {
if (err) throw err;

console.log(body);
})
});

在此代码片段中,我将响应传输到 iconv-lite 转换流,该流完成所有脏工作。

关于node.js - 解码特殊西里尔字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46970062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com