前提
以下の環境で検証している。
OS : Windows 10 22H2
PowerShell : PowerShell 5.1
問題
Compress-Archiveコマンドレットで作成したzipファイルを解凍した際に、
文字化けすることがある。
原因
zipファイルを解凍する際に利用しているアーカイバが、
「UTF-8」に対応していないことが原因である。
回避方法
-
Windowsの標準機能で解凍する。
Windowsの標準機能で解凍する方法
- zipファイルを右クリックし、コンテキストメニュー内の「すべて展開」を選択する。
- 「圧縮(ZIP形式)フォルダーの展開」ウィンドウにて、「展開(E)」ボタンを押下する。
-
Expand-Archiveコマンドレットで解凍する。
- サンプルコード
$folder = Join-Path $env:USERPROFILE "\Desktop\Test" $zip = Join-Path $env:USERPROFILE "\Desktop\Test.zip" Expand-Archive $zip $folder
- サンプルコード
-
アーカイバが対応しているエンコードを指定して、zipファイルを作成する。
この方法では、Compress-Archiveコマンドレットを利用せず、
別の方法でzipファイルを作成している。
なぜなら、Compress-Archiveコマンドレットには、
エンコードを指定するパラメータが存在しないためである。以下2つのサンプルコードは、アーカイバが「Shift_JIS」に対応している場合を
想定している。- フォルダを圧縮する場合のサンプルコード
Add-Type -AssemblyName System.IO.Compression.FileSystem $folder = Join-Path $env:USERPROFILE "\Desktop\Test" $zip = Join-Path $env:USERPROFILE "\Desktop\Test.zip" [IO.Compression.ZipFile]::CreateFromDirectory($folder,$zip,[IO.Compression.CompressionLevel]::Optimal,$false,[Text.Encoding]::GetEncoding("shift_jis"))
- ファイルを圧縮する場合のサンプルコード
Add-Type -AssemblyName System.IO.Compression Add-Type -AssemblyName System.IO.Compression.FileSystem $file = Join-Path $env:USERPROFILE "\Desktop\Test.txt" $fileName = Split-Path $file -Leaf $zip = Join-Path $env:USERPROFILE "\Desktop\Test.zip" $zipArchive = [IO.Compression.ZipFile]::Open($zip,[IO.Compression.ZipArchiveMode]::Create,[Text.Encoding]::GetEncoding("shift_jis")) [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zipArchive,$file,$fileName) $zipArchive.Dispose()
- フォルダを圧縮する場合のサンプルコード
参考文献