HTMLのテキスト置換とエンコード変更
現在ではほとんどのHTMLファイルで文字エンコーディングはUTF-8が使用されているが、たまに古い環境でShift-JISを使用したい場合がある。
その場合UTF-8で作成したファイルの中身の記述とファイル自体の文字エンコーディングをShift-JISに変更する必要する必要があるのだが、これを手動で1つずつ修正するのは手間がかかるし作業ミスも発生しやすい。
しかし、Node.jsを使用すればコマンドを実行しただけで一括でファイルをShift-JISに変更することができる。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>サンプル</title>
</head>
<body>
<h1>サンプル</h1>
</body>
</html>
一括でUTF-8からShift-JISにする方法
今回はfoo.htmlとbar.htmlという2つのHTMLをUTF-8からShift-JISにする方法について解説する。
まず適当なプロジェクトフォルダを作成してcdで移動後、npm init -yでpackage.jsonを作成する。
次にasyncとiconv-liteを使用するので事前に以下のコマンドでインストールする。
npm i async iconv-lite
次にNode.jsで実行するJavaScriptファイルを適当な名前で作成して以下のようにコードを書く。
const fs = require('fs')
const async = require('async')
const iconv = require('iconv-lite')
async.each(['foo', 'bar'], (file) => {
fs.readFile(`./src/${file}.html`, 'UTF-8', (err, data) => {
if (err) return console.error(err)
const result = data.replace(/UTF-8/ig, 'Shift_JIS')
fs.writeFile(`./dist/${file}.html`, iconv.encode(result , 'Shift_JIS'), (err) => {
if (err) return console.error(err)
})
})
})
あとは作成したファイルをnodeコマンドで実行するだけでHTMLファイルを置換できる。
node example.js
特定のファイル名を記述するのではなくglobを使用してマッチする拡張子全部を対象にする場合は以下の通り。
const fs = require('fs')
const glob = require('glob')
const async = require('async')
const iconv = require('iconv-lite')
glob('*.html',(err, files) => {
async.each(files, (file) => {
fs.readFile(`./src/${file}`, 'UTF-8', (err, data) => {
if (err) console.error(err)
const result = data.replace(/UTF-8/ig, 'Shift_JIS')
fs.writeFile(`./dist/${file}`, iconv.encode(result , 'Shift_JIS'), (err) => {
if (err) console.error(err)
})
})
})
if (err) console.error(err)
})