
HTMLのテキスト置換とエンコード変更
現在ではほとんどのHTMLファイルで文字エンコーディングはUTF-8が使用されているが、たまに古い環境でShift-JISを使用したい場合がある。
その場合UTF-8で作成したファイルの中身の記述とファイル自体の文字エンコーディングをShift-JISに変更する必要する必要があるのだが、これを手動で1つずつ修正するのは手間がかかるし作業ミスも発生しやすい。
しかし、Node.jsを使用すればコマンドを実行しただけで一括でファイルをShift-JISに変更することができる。
1 2 3 4 5 6 7 8 9 10 11 | <! 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ファイルを適当な名前で作成して以下のようにコードを書く。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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を使用してマッチする拡張子全部を対象にする場合は以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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) }) |