我正在尝试从base64解码电子邮件文件中的附件并将其保存到磁盘。
出于测试目的,这是我的代码。其中input.txt只包含base64编码数据,这是一个HTML文件。
$file = "C:\input.txt"
$data = Get-Content $file
[System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($data)) > out.html
解码工作正常,它会生成一个包含所有行的新文件,并且与原始附件明显相同。问题是输出文件的大小是两倍(实际上(filesize * 2)+6字节,在这种情况下)。
我不正确地解码了这个吗?我也尝试过UTF8而不是ASCII ......结果相同。
答案 0 :(得分:9)
嗯,我得到了它的工作。谁知道Out-File默认重新编码为Unicode?通过执行以下操作解决:
$file = "C:\input.txt"
$data = Get-Content $file
[System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($data)) | Out-File -Encoding "ASCII" out.html
答案 1 :(得分:3)
这种单一格式保留了base64编码文件的原始编码,因此它将与二进制文件(例如PDF或ZIP)一起使用。根据需要更改".\input.txt"
和output.bin
-这将需要.\input.txt
,以64为基数对其进行解码,然后将字节完全与编码文件时一样写入output.bin
$file = ".\input.txt"; [System.Convert]::FromBase64String((Get-Content $file)) | Set-Content output.bin -Encoding Byte
答案 2 :(得分:1)
我知道这是一个老问题,但是我找到了另一个答案。 您可以在base64转换时使用unicode,它将在之后转换。
$file = "C:\temp\input.txt"
$data = Get-Content $file
[System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($data)) > out.html
答案 3 :(得分:0)
在Windows 10上,使用PowerShell可以执行以下操作:
certutil -decode in.b64 out.txt