20

我正在尝试从 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 ......结果相同。

4

5 回答 5

19

好吧,我让它工作了。谁知道 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
于 2013-09-19T23:27:11.580 回答
16

这种单行代码保留了 base64 编码文件的原始编码,因此可以处理 PDF 或 ZIP 等二进制文件。根据需要进行更改".\input.txt"-output.bin这将采用.\input.txtbase 64 对其进行解码,然后将字节写入与output.bin文件编码时完全相同的字节。

$file = ".\input.txt"; [System.Convert]::FromBase64String((Get-Content $file)) | Set-Content output.bin -Encoding Byte
于 2019-02-21T15:38:48.657 回答
10

在 Windows 10 上,您可以使用 PowerShell 执行以下操作:

certutil -decode in.b64 out.txt
于 2019-12-26T13:43:05.940 回答
1

我知道这是一个老问题,但我找到了另一个答案。您可以在 base64 转换处使用 unicode,它将适合之后。

$file = "C:\temp\input.txt"
$data = Get-Content $file
[System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($data)) > out.html
于 2018-11-26T20:17:48.770 回答
0

老问题,新答案。保留换行符的解决方案

// Generate Content
ssh-keygen -t rsa -b 2048 -f example_rsa
// Encode
[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($(Get-Content -Path example_rsa -Encoding utf8 -Raw))) >> encoded
// Decode
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($(Get-Content -Path encoded -Encoding utf8 -Raw))) >> decoded
于 2021-09-30T09:18:08.300 回答