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()
結構ハマッた。