一覧へEnglish

T08

日本語入りの .ps1 が、構文エラーになるか文字化けして動く

症状

エディタでは正しく見える .ps1 が、実行すると「文字列に終端記号がありません」などの構文エラーになるか、エラーなしで化けた文字を出す。

30秒で確かめる

PowerShell(Windows PowerShell 5.1)に貼って実行します。一時フォルダ(%TEMP% の下)にだけファイルを作ります。最後に REPRODUCED と出たら、あなたの PC で起きています。

$d = Join-Path $env:TEMP ('cc-trap-' + (Get-Date -Format 'yyyyMMddHHmmss')); New-Item -ItemType Directory $d -Force | Out-Null
$want = [string][char]0x65E5 + [char]0x672C
[IO.File]::WriteAllText("$d\nobom.ps1", "Write-Output '$want'", (New-Object System.Text.UTF8Encoding $false))
$o = powershell -NoProfile -ExecutionPolicy Bypass -File "$d\nobom.ps1"
"got $o (want $want)"
if ($o -ne $want) { 'REPRODUCED' } else { 'NOT REPRODUCED' }

なぜ起きるか

Windows PowerShell 5.1 は、BOM の無い .ps1 を UTF-8 ではなく ANSI コードページ(日本語なら 932)として読む。今のエディタの多くは BOM なしの UTF-8 で保存する。

直し方

日本語を含む .ps1 は UTF-8(BOM 付き)で保存する。または .ps1 を ASCII だけで書き、日本語は [char]0x65E5 のように組み立てる。

$t = [IO.File]::ReadAllText($path)
[IO.File]::WriteAllText($path, $t, (New-Object System.Text.UTF8Encoding $true))

作者の PC での結果

出力が元と違った

作者の PC: Windows 11 / Windows PowerShell 5.1.26100 / Python 3.13.7 / Claude Code 2.1.304、日本語の Windows(コードページ 932)。2026-10-20〜22 に確認。

こんな言葉で探した人へ

関連

この穴を最初から踏まないようにした部品(書き込み先を絞る安全装置〈onFailure: block 付き〉、夜の無人実行、ファイルとフックの設定を調べる健康診断、CLAUDE.md の型、試験一式)は cc-win-kit にまとめています。

cc-win-kit 英語版(Payhip、19ドル。日本語版は 2026年10月31日に note で公開)

ほかの症状