DotNetZip v1.9のReadメソッドにエンコードを渡す方法です。
ポイントは Ionic.Zip.ReadOptionsで、これのEncodingプロパティに932を指定し、Readメソッドの第二引数に指定します。
サンプルコード(powershell)
[CmdletBinding()] Param( [string] $zipFilePath = ".\test.zip" ) [void][System.Reflection.Assembly]::LoadFrom(".\Ionic.Zip.dll" ) $readOptions = New-Object Ionic.Zip.ReadOptions $readOptions.Encoding = [System.Text.Encoding]::GetEncoding(932) $zipfile = [Ionic.Zip.ZipFile]::Read($zipFilePath,$readOptions) foreach($file in $zipfile){ $file.FileName } $zipfile.Dispose()
ネット上によくあるサンプルコードでは、Readメソッドの第二引数に[System.Text.Encoding]を直接渡すものがありますが、これはv1.9では「”Read” のオーバーロードで、引数の数が “2” であるものが見つかりません。」というエラーになってしまいます。
NGなコード例(powershell)
[CmdletBinding()] Param( [string] $zipFilePath = ".\test.zip" ) [void][System.Reflection.Assembly]::LoadFrom(".\Ionic.Zip.dll" ) $encoding = [System.Text.Encoding]::GetEncoding(932) $zipfile = [Ionic.Zip.ZipFile]::Read($zipFilePath,$encoding) #←エラーになる foreach($file in $zipfile){ $file.FileName } $zipfile.Dispose()
結構ハマッた。