LoginSignup
0
0

【PowerShell 5.1】Compress-Archiveコマンドレットで作成したzipファイルを解凍すると文字化けする

Last updated at Posted at 2023-12-31

前提

以下の環境で検証している。
OS : Windows 10 22H2
PowerShell : PowerShell 5.1

問題

Compress-Archiveコマンドレットで作成したzipファイルを解凍した際に、
文字化けすることがある。

原因

zipファイルを解凍する際に利用しているアーカイバが、
「UTF-8」に対応していないことが原因である。

回避方法

  1. Windowsの標準機能で解凍する。

    Windowsの標準機能で解凍する方法
    1. zipファイルを右クリックし、コンテキストメニュー内の「すべて展開」を選択する。
    2. 「圧縮(ZIP形式)フォルダーの展開」ウィンドウにて、「展開(E)」ボタンを押下する。
  2. Expand-Archiveコマンドレットで解凍する。

    • サンプルコード
      $folder = Join-Path $env:USERPROFILE "\Desktop\Test"
      $zip = Join-Path $env:USERPROFILE "\Desktop\Test.zip"
      
      Expand-Archive $zip $folder
      
  3. アーカイバが対応しているエンコードを指定して、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()
      

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0