[英]How to get base64 encoding the same for AutoIt and PowerShell?
我使用Ward 的 AutoIt 机器代码算法集合来获取 AutoIt 中字符串的 base64 编码:
#Include "Base64.au3"
Dim $Encode = _Base64Encode("ps")
MsgBox(0, 'Base64 Encode Data', $Encode)
结果:
cHM=
PowerShell 代码得到base64编码的相同字符串“ps”:
$commands = 'ps'
$bytes = [System.Text.Encoding]::Unicode.GetBytes($commands)
$encodedString = [Convert]::ToBase64String($bytes)
$encodedString
我得到的是:
cABzAA==
PowerShell 的结果是我想要的。 如何使用 AutoIt 获得相同的结果? 我想这是一个字符编码问题。
当我运行这个脚本时:
#Include "Base64.au3"
$Decode = _Base64Decode("cABzAA==")
ConsoleWrite($Decode & @CRLF)
我得到结果:0x70007300。 基本上,这意味着有一个'70'字符(p),一个'00'字符(nul),一个'73'字符(s),'00'字符。 您可以使用 function 在 AutoIt 中轻松地重新创建此行为,如下所示:
#Include "Base64.au3"
Dim $Encode = _Base64WEncode("ps")
ConsoleWrite($Encode & @CRLF)
Func _Base64WEncode($string)
Local $result = ""
Local $arr = StringSplit($string, "")
For $i = 1 To UBound($arr) - 1
$result &= $arr[$i] & Chr(0)
Next
$result = _Base64Encode($result)
Return $result
EndFunc
结果是:cABzAA==
有点骇人听闻,但我会说它比完整的 Unicode 编码更可取,如果这不是你所需要的。
#Include "Base64.au3"
#include <MsgBoxConstants.au3>
#include <StringConstants.au3>
Dim $Encode = _Base64Encode(StringToBinary("ps", $SB_UTF16LE))
MsgBox(0, 'Base64 Encode Data', $Encode)
这将给你想要的:
cABzAA==
使用 ASCII 编码代替 Unicode:
$bytes = [System.Text.Encoding]::ASCII.GetBytes($commands)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.