【问题标题】:node request ISO-8859-1 not working since node 4节点请求 ISO-8859-1 自节点 4 起不起作用
【发布时间】:2015-10-20 19:25:48
【问题描述】:

我得到一个返回 latin1 的网页

它适用于节点 0.10 的 iconv-lite。但现在有了

$ node -v
v4.1.1

I can't use iconv-lite with the latest node version。所以我试图回到 Iconv:

var Iconv  = require('iconv').Iconv;
...
  request(url, {
        uri: url,
        method: 'GET'}, function (err, resp, body) {
        var ic = new Iconv('ISO-8859-1', 'utf-8');
        var buf = ic.convert(body);
        body = buf.toString('utf-8');

但这导致�ber应该是Über

我不知道如何解决这个问题。欢迎任何提示。

【问题讨论】:

  • 我没有解决方案,但我认为您可以重用 Iconv 实例,而不是一遍又一遍地为每个请求创建它。
  • doc 中始终是UTF-8(与您使用的utf-8 相比)。你检查过吗?
  • 1.当然,这只是测试设置,2. 改为 UTF-8 但同样的问题
  • 请试试这个:var buf = ic.convert(Buffer(body,'binary'));
  • 嘿@ɦassansin这会导致'ýber'而不是Über

标签: node.js encoding request iso-8859-1


【解决方案1】:

尝试latin1 而不是iso-8859-1。这就是文档所说的用于从 iso-8859-1 转换为 utf-8...

编辑:您还必须将请求编码设置为“二进制”才能正常工作。

编辑 2:刚刚意识到,在二进制请求时,您甚至不需要 Iconv。

request(url, {... encoding: 'binary' ...},...
console.log(body)

【讨论】:

  • 这导致ýberland
  • 我创建了一个简单的测试用例,并找到了解决方案。我已经相应地更新了答案
  • 谢谢!我可以肯定即使没有 iconv 它也能正常工作(并且速度快了大约 30%)!
  • 谢谢你,在尝试了几个小时不同的方法后终于解决了我同样的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多