首页 > 解决方案 > 我可以使用 node.js 将奇怪的文件名转换为人类可读的吗?

问题描述

您好我正在尝试将文件名和内容转换EUC-KRUTF8. 由于我使用的是 macOS(BigSur 11.4),如果使用提供解压缩器的操作系统解压缩,则文件名和内容没有问题。但是当我试图以编程方式解决这个问题时,我解决了内容编码,但文件名被破坏了。

我正在使用解压缩extract-zip器,编码器用于iconv-lite. 请参阅下面的代码。

import extract from 'extract-zip'
import iconv from 'iconv-lite'
import fs from 'fs'
import path from 'path'

// download file from web...

const targetPath = ZIP_FROM_WEB

try {
  await extract(zipPath, { dir: targetPath })
} catch (err) {
  logger.error(`[ZipExtractError] ${err}`)
  fs.rmSync(targetPath, { force: true, recursive: true })
  process.exit(1)
}

const eucKrFiles = fs.readdirSync(targetPath)

eucKrFiles.forEach(fileName => {
  if (path.extname(`${targetPath}/${fileName}`) !== '.txt') {
    return
  }
  // read and overwrite EUC-KR to UTF8
  const euckrContent = fs.readFileSync(`${targetPath}/${fileName}`)
  const utf8EncodedContent = iconv.decode(euckrContent, 'euc-kr')
  fs.writeFile(`${targetPath}/${fileName}`, utf8EncodedContent, err => {
    if (err) {
      logger.error(`[UTF8ConversionError] ${err.message} ${err.stack}`)
      process.exit(1)
    }
  })
  logger.info(`[UTF8FileConversion] Successfully convert ${fileName} encoding EUC-KR to UTF8.`)
})

但是文件名是这样的。

好的和坏的文件名

此外,来自同一站点(每日目录)的其他文件,这个问题从未发生过。

我怎么解决这个问题?我可以将这个奇怪的文件名转换为人类可读的吗?

标签: node.jsencodingutf-8unzip

解决方案


推荐阅读