>

이 코드를 사용하여 웹 페이지를 다운로드하고 있습니다 ( request 사용)  라이브러리) 및 모든 것을 디코딩 ( iconv-lite 사용)  도서관). loader  함수는 웹 사이트 본문에서 일부 요소를 찾은 다음 JavaScript 객체로 반환하는 것입니다.

request.get({url: url, encoding: null}, function(error, response, body) {
        // if webpage exists, process it, otherwise throw 'not found' error
        if (response.statusCode === 200) {
          body = iconv.decode(body, "iso-8859-1");
          const $ = cheerio.load(body);
          async function show() {
            var data = await loader.getDay($, date, html_tags, thumbs, res, image_thumbnail_size);
            res.send(JSON.stringify(data));
          }
          show();
        } else {
          res.status(404);
          res.send(JSON.stringify({"error":"No content for this date."}))
        }
      });

페이지는 ISO-8859-1 형식으로 인코딩되어 있으며 내용이 정상으로 표시되며 잘못된 문자가 없습니다. iconv-lite 를 사용하지 않았을 때 일부 문자 (예 : ü , 이렇게 생겼습니다 : �. 이제 위에 제공된 코드와 같이 라이브러리를 사용하면 대부분의 문자가 좋아 보이지만 일부는 예를 들어 보입니다. š  웹 사이트에 아무런 문제없이 표시 되더라도 빈 상자입니다.

res.send(body); 를 사용하여 출력을 인쇄 할 때 cheerio의 문제가 아니라고 확신합니다.  또는 res.send(JSON.stringify({"body":body})); 빈 상자 문자가 여전히 존재했습니다. 어쩌면 Express에 문제가 있습니까? 고칠 방법이 있습니까?

수정 : 빈 상자 문자를 Google에 복사했는데 š 로 변경되었습니다. 아마도 그게 중요 할 것입니다

또한 res.charset 를 사용하여 Express의 출력을 변경하려고했습니다.  하지만 도움이되지 못했습니다.


  • 답변 # 1

    이 웹 사이트를 사용했습니다 : https://validator.w3.org/nu/?doc=https%3A%2F%2Fapod.nasa.gov%2Fapod%2Fap170813.html 내가 실제로 긁는 페이지가 있는지 확인하기 위해 와이즈 비즈  인코딩, 그것은 ISO-8859-1 가있는 것으로 밝혀졌습니다  부호화. API에서 인코딩을 변경했습니다 ( Windows-1252 ) 이제 제대로 작동합니다.

    var encoding = 'windows-1252'

  • 이전 c# - datadridview에서 행 위치를 변경하는 방법은 무엇입니까?
  • 다음 ethereum - 트러플에 배포 된 스마트 계약 테스트