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

#encoding #fs #cjk #node-fetch

#кодирование #fs #cjk #узел-выборка

Вопрос:

Я пытаюсь получить страницу из Интернета, а затем сохранить ее в 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-документе по-прежнему не отображаются соответствующие специальные символы, как на онлайн-странице, с которой он взят. Страница, которую я тестирую прямо сейчас, является этой

Ответ №1:

Строка:

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

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

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

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

Комментарии:

1. У меня нет доступа к источнику этой страницы. Должен ли я изменить это в скрипте узла после загрузки страницы перед кодированием и сохранением?