Имена файлов, содержащие диакритические знаки, не отображаются должным образом с использованием Javascript в NodeJs - PullRequest
0 голосов
/ 10 ноября 2019

Итак, не программируя 23 года, я решил начать изучать Javascript. Я пытаюсь написать программу для чтения моих музыкальных файлов и создания HTML-страницы на основе файлов, найденных в определенном каталоге.

Идет хорошо, пока я не нажму имена файлов, содержащие диакритические знаки (например, é, ü, ø и т. д.)

Например: Андре Хейзес превращается в: Андрэ Хейзес

Например: Андреа Бочелли и Сара Брайтман - Время прощаться [Con Te Partirò] (одиночный) ходв Andrea Bocelli & Sarah Brightman - время попрощаться [Con Te PartiroÌ €] (single)

Созданная мной ссылка больше не работает

Команда, которую я использую для создания HTMLутверждение:

<td><a href="${item.vDir}/${item.vFilename}">${item.vFilename}</a></td>

Это код, который я использую для чтения файлов из файловой системы. Я работаю на Mac, OS Catalina, так что в основном это вариант Unix.

// List all files in a directory in Node.js recursively in a synchronous fashion
var ReadDirFiles = function(pdir, pfilelist) {
  files = vFileSystem.readdirSync(pdir,"utf-8");
  filelist = pfilelist;
  files.forEach(function(file) {
    if (vFileSystem.statSync(pdir + '/' + file).isDirectory()) {
      filelist = ReadDirFiles(pdir + '/' + file, filelist);
    }
    else {
      vstats = vFileSystem.statSync(pdir + '/' + file);
      // debug info
      // console.log(vstats);
      filelist.push({vFilename: file, vDir: pdir, vBirthtime: formatDate(vstats.birthtime), vSize: vstats.size});
    }
  });
  return filelist;
};

Это оператор, который я использую для записи вывода на диск, и оказывается, что проблема в операторе write:

fs.writeFileSync(buildPathHtml.buildPathHtml(), html);

Когда вывод записывается обратно на диск, происходит преобразование диакритических знаков.

Кто-нибудь знает хитрость, как работать с диакритическими знаками?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2019

Возможно, ваша файловая система не основана на utf8. Я где-то читал, что Western для Mac.

0 голосов
/ 10 ноября 2019

Попробуйте использовать функции кодирования и декодирования в вашем скрипте. Есть много функций, делающих это в Javascript, просто используйте то, что вам нужно. Для полной кодировки / декодирования вы можете использовать (или только скопировать и вставить) в свой скрипт код, предложенный в https://www.strictly -software.com / htmlencode / . Есть небольшая библиотека кодирования Javascript, выполняющая эту работу ( encoder.js ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...