─ NOW LOADING ─
![wombWorks[ウームワークス]](https://womb-works.net/wp-content/themes/wombWorks/img/logo.png)
古いWebサイトや、Windows製のHTMLファイルでは、
Shift-JISで保存され、metaタグの文字コード宣言もShift_JISのまま
というケースがよくあります。
この状態のHTMLをVSCodeで開くと文字化けしたり、
UTF-8前提のサーバーへ移行する際に不具合が出ることがあります。
この記事では、PowerShellだけを使って
を まとめて一括変換する方法 を紹介します。
.html<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> が記述されている以下のコードを そのままコピーして実行してください。
$path = 'C:\Users\yamada\(任意のディレクトリ)'
$utf8NoBom = [System.Text.UTF8Encoding]::new($false)
Get-ChildItem $path -Filter *.html | ForEach-Object {
$content = [System.IO.File]::ReadAllText($_.FullName, [System.Text.Encoding]::GetEncoding(932))
$content = $content -replace 'charset=Shift_JIS', 'charset=UTF-8'
[System.IO.File]::WriteAllText($_.FullName, $content, $utf8NoBom)
}
$path
には、HTMLファイルが入っているフォルダのパスを指定してください。
GetEncoding(932) を指定することで、
WindowsのShift-JIS(CP932)として明示的に読み込みます。
自動判定ではないため、読み込み時に文字化けしません。
$content = $content -replace 'charset=Shift_JIS', 'charset=UTF-8'
HTML構文の解析は行わず、
文字列として確実に置換します。
変換後は次のようになります。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
[System.Text.UTF8Encoding]::new($false) は、
UTF-8(BOMなし)を指定しています。
Web用途・VSCode・各種サーバー環境で最もトラブルが起きにくい形式です。
このスクリプトを実行すると、対象フォルダ内のすべてのHTMLファイルが
状態になります。
PowerShellは成功時に何も表示しないため、
エラーが出なければ正常終了です。
.html 以外のファイルには影響しませんShift-JISのHTMLをUTF-8に移行する際は、
を別々に行う必要があると思われがちですが、
PowerShellを使えば 一括で安全に処理できます。
古いWebサイトのメンテナンスや、
UTF-8環境への移行作業で、そのまま使える実用的な方法です。