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

如何在PowerShell中从Unicode字符串还原原始字节序列?

问题分析与解决方案

问题根源

你使用的[System.Text.Encoding]::Unicode(即UTF-16编码)在处理无效字节序列时会自动替换无效内容:当原始字节无法对应合法的Unicode码点时,GetString方法会将这些无效序列替换为替换字符U+FFFD(对应字节239,191,189)。后续调用GetBytes时,这些位置会输出替换字符的字节,而非原始字节,因此无法还原。

你的原始$bytes数组中包含多组无效的UTF-16字节组合(比如239,174、217,221等),这些组合无法映射到合法的Unicode码点,导致编码转换时数据丢失。

无损还原解决方案

要实现二进制字节与字符串的无损转换,不能使用文本编码(如UTF-16),而应使用Base64编码——它专门用于将任意二进制数据转换为纯文本字符,不会修改或丢失原始数据。

实现代码

$bytes  = [byte[]]@(239,174,61,217,221,117,215,174,248,221,253,56,219,126,53,221,189,122,211,157,26,231,126,57,50,0)

# 将原始字节转换为Base64字符串(无损中转)
$base64String = [Convert]::ToBase64String($bytes)
# 从Base64字符串还原原始字节
$bytes2 = [Convert]::FromBase64String($base64String)

# 对比验证结果
cls
[string]::Join(',', $bytes)
[string]::Join(',', $bytes2)

原理说明

Base64通过将每3个字节转换为4个可打印ASCII字符的方式,实现二进制到文本的映射,整个过程不会对原始字节做任何语义解析或修改,因此能100%还原原始数据。

内容的提问来源于stack exchange,提问作者Carsten

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:07:19