Как получить и fs.writeFile веб-страницу с кодировкой SJIS/Shift_JIS

Я пытаюсь получить страницу из Интернета, а затем сохранить ее в файл HTML. На странице есть это в шапке:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" >
<head>
<meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS" />
</head>

Что бы я ни пытался, сохраненная HTML-страница выглядит ужасно, и я просто не могу заставить ее правильно сохранять японские символы.

Я использую node-fetch, fs.writeFile и модуль с именем jconv. Я пробовал все комбинации, но ничего не работает. Прямо сейчас код должен конвертировать из SJIS в UTF-8, тогда fs должен записать файл с кодировкой UTF-8.

fetch(link).
then((res) => {
    if (res.ok) {
        return res.text();
    }
    console.log("Invalid data");
}).
then((body) => {
    // this is supposed to convert from SJIS to UTF-8
    var buf = jconv.convert(body, 'SJIS', 'UTF-8');

    // save file
    fs.writeFile(path, buf, 'UTF-8', (err) => {
        if (!err) {
            console.log('Saved');
        }
    });
});

Я пробовал другие кодировки, но окончательный HTML-документ по-прежнему не отображает нужные специальные символы, как на онлайн-странице, с которой он взят. Страница, которую я сейчас тестирую, называется этой.


person bMain    schedule 09.04.2019    source источник


Ответы (1)


Линия:

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

также необходимо изменить на:

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

чтобы информация о кодировке в заголовке соответствовала новой кодировке.

person Anais Belly    schedule 09.04.2019
comment
У меня нет доступа к источнику этой страницы. Должен ли я изменить это в сценарии узла после загрузки страницы перед кодированием и сохранением? - person bMain; 10.04.2019