环境
Win10 1903。$PSCulture
为ja-JP
,$PSUICulture
为en-US
。
另外,我调了一下system locale的东西,把“ワールドワイド言語サポートで Unicode UTF-8を使用”这项选了,([System.Text.Encoding]::Default).BodyName
为utf-8
。
需求
这边经常能下到Shift-JIS编码的zip文件,文件名全都是美到令人窒息的乱码。咱就别用SJIS来编码了,先解出来可好?
对策
太长不看版
用Bandizip的图形界面搞定就好。用它打开zip文件,直接就能选编码。
7-Zip虽然用图形界面(应该?)做不到,但命令行没问题。比如:&"C:\Program Files\7-Zip\7z.exe" x (Get-ChildItem .)[11].Name -oE:\ -mcp=932
就可以把当前目录的第11个文件用Shift-JIS(代码页为932)解压到E盘那边了。
使用System.IO.Compression的ZipFile
本段撰写日期为2020/07/13。
文档:
- ZipFile Class
- ZipFile.CreateFromDirectory Method
- ZipFile.ExtractToDirectory Method
- Encoding.WindowsCodePage Property
- Encoding Constructors
过了这么久,终于决定填一下这个坑。时间过了好久,现在已经鸟枪换炮了,在用pwsh 7.0.2,虽然在这个例子中看不出来w
Get-Location
# -> Path
# -> ----
# -> D:\
Get-ChildItem フォルダー
# -> Directory: D:\フォルダー
# ->
# -> Mode LastWriteTime Length Name
# -> ---- ------------- ------ ----
# -> -a--- 2020/07/13 21:58 2097152 テスト.dat
Add-Type -AssemblyName 'System.IO.Compression.FileSystem'
# 压缩:
[System.IO.Compression.ZipFile]::CreateFromDirectory('D:\フォルダー', 'D:\テスト.zip', [System.IO.Compression.CompressionLevel]::NoCompression, [System.Text.Encoding]::GetEncoding('shift_jis'))
# 解压缩:
[System.IO.Compression.ZipFile]::ExtractToDirectory('D:\テスト.zip', 'D:\フォルダー2', [System.Text.Encoding]::GetEncoding('shift_jis'), $false)
这个至少支持字符编码,而且不算难用,建议试试。