全角文字が大量に含まれているとなぜか例外が出る
PowerShell 7 で日誌をgrepするとエラーで落ちることがあって、何でだろうと思い調べたら、どうもバグっぽい。
全角文字が画面バッファーの幅以上に含まれていると例外が出る。
$Host.UI.RawUI.BufferSize.Width # 160 "`u{5b57}" * 159 | Out-File foo.txt Select-String "`u{5b57}" foo.txt # foo.txt:1:字字字字字字字字字字字字字字 ... "`u{5b57}" * 160 | Out-File bar.txt Select-String "`u{5b57}" bar.txt # out-lineoutput: startIndex cannot be larger than length of string. (Parameter 'startIndex')
ASCIIならいくら含まれていても問題なし。一行に含まれている全角文字の数だけが問題。
"xxx `u{5b57} xxx " * 159 | Out-File foo.txt Select-String "`u{5b57}" foo.txt # foo.txt:1:xxx 字 xxx xxx 字 xxx xxx 字 xxx ... "xxx `u{5b57} xxx " * 160 | Out-File bar.txt Select-String "`u{5b57}" bar.txt # out-lineoutput: startIndex cannot be larger than length of string. (Parameter 'startIndex')
回避法
手動で文字列化してください。こんな感じ。
"`u{5b57}" * 160 | Out-File bar.txt Select-String "`u{5b57}" bar.txt | Out-String # bar.txt:1:字字字字字字字字字字字字字字 ...
おわり🌱
去年の時点で似ような報告が上がってるから、ま、すぐに直ると思うけどね。
github.com