You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell Base64编解码函数异常:解码后字符间出现空格问题排查

问题原因及解决办法

核心问题:编码解码字符集不匹配

你的B64函数编码时使用[System.Text.Encoding]::Unicode(即UTF-16双字节编码),但解码时错误选用了[System.Text.Encoding]::ASCII(单字节编码)。

UTF-16编码会将每个字符转换为两个字节(比如字符s会被编码为0x00 0x73),而ASCII解码时会把这两个字节当作独立的ASCII字符处理:其中0x00是不可见的空字符,显示时表现为空格,0x73则对应s,最终就出现了字符间插入空格的异常现象。

修复后的函数代码

将解码部分的ASCII替换为Unicode,保证编码解码使用一致的字符集:

function B64 {
[CmdletBinding(DefaultParameterSetName="encString")]
param(

    [Parameter(Position=0, ParameterSetName="encString")]
    [Alias("es")]
    [string]$encString,

    [Parameter(Position=0, ParameterSetName="decString")]
    [Alias("ds")]
    [string]$decString

)

if ($psCmdlet.ParameterSetName -eq "encString") {
        $encoded = [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($encString))
        return  $encoded
        }

elseif ($psCmdlet.ParameterSetName -eq "decString") {       
        # 改为与编码一致的Unicode字符集
        $decoded = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($decString))
        return $decoded
        }
}

调用代码的额外问题修复

原调用代码存在变量错误和文件读写的潜在问题,修复如下:

  1. 未定义的$fp变量替换为$filePath
  2. 添加-Raw参数读取整个文件内容,避免默认按行拆分引入换行符
  3. 指定-Encoding utf8写入文件,避免默认编码导致的后续读取异常

修复后的调用代码:

$filePath = "C:\Users\User\Desktop\snp.txt"

# 读取完整文件内容
$originalContent = Get-Content $filePath -Raw
$encodedContent = B64 -encString $originalContent
# 以UTF-8编码写入编码后的内容
$encodedContent | Out-File -FilePath $filePath -Encoding utf8

Start-Sleep -Seconds 1

# 重新读取编码内容
$encodedData = Get-Content $filePath -Raw
$decodedContent = B64 -ds $encodedData
$decodedContent | Out-File -FilePath $filePath -Encoding utf8

内容的提问来源于stack exchange,提问作者I am Jakoby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:45:57