【发布时间】:2013-11-29 12:19:01
【问题描述】:
在 C# 代码中,我将字符串(示例PRmlyc3RuYW1lOj1FbW1hbnVlbMKkJMKkTGFzdE5hbWU6PURyZXV4wqQkwqRNYWlsYm94VHlwZTo9TWJ4)转换为字节数组,然后从 powershell 脚本将字节数组转换回字符串。
这会导致字符串的开头和结尾出现垃圾:
☺ ????☺ ♠☺ PRmlyc3RuYW1lOj1FbW1hbnVlbMKkJMKkTGFzdE5hbWU6PURyZXV4wqQkwqRNYWlsYm94VHlwZTo9TWJ4♂
C#代码:
byte[] array = ToByteArray(encodedParameters);
private byte[] ToByteArray(object source)
{
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream())
{
formatter.Serialize(stream, source);
return stream.ToArray();
}
}
Powershell 解码:
$cmd = [System.Text.Encoding]::ASCII.GetString($buf, 0, $len)
或
$cmd = [System.Text.Encoding]::UTF8.GetString($buf, 0, $len)
或
$cmd = [System.Text.Encoding]::UNICODE.GetString($buf, 0, $len)
如果我在 C# 和 powershell 中转储字节数组,我会得到相同的缓冲区:
0 1 0 0 0 255 255 255 255 1 0 0 0 0 0 0 0 6 1 0 0 0 80 82 109 108 121 99 51 82 117 89 87 49 108 79 106 49 70 98 87 49 104 98 110 86 108 7 84 71 70 122 100 69 53 104 98 87 85 54 80 85 82 121 90 88 86 52 119 113 81 107 119 113 82 78 89 87 108 115 89 109 109 107 52 9 86 78> /p>
粗体接缝的字符是C#添加的额外字节,一种标题和结束字符。
问题:如何在没有这些额外垃圾的情况下将字符串恢复到 powershell 中?
【问题讨论】:
-
你在 c# 中序列化,但在 powershell 中解码。
标签: c# arrays powershell byte