将十六进制字符串解码为 UTF-16?



我正在尝试从数据库理解和提取数据。关键信息似乎在其中一个表中编码为十六进制字符串。当我试图将其转换为ASCII时,它给了我胡言乱语。还有其他与此数据库结合使用的文件,我相信这些文件被编码为 Unicode UTF-16。所以我想尝试将这个十六进制字符串转换为 UTF-16,看看它是什么样子的。

有人可以帮助我弄清楚如何在Powershell中执行此操作吗?

谢谢

假设您的字符串由偶数个十六进制字符组成,您可以在每 2 个字符后插入一个分隔符字符,删除尾随分隔符(以免生成尾随空元素(,然后在分隔符处拆分字符串。

$s = 'a3422b4a'
$s -replace '..', '$&:' -replace ':$' -split ':'

然后将生成的片段转换为字节:

... | ForEach-Object { [byte]"0x$_" }

收集变量中的字节数组并将其转换为 Unicode 字符串:

[Text.Encoding]::Unicode.GetString($bytes)

[Text.Encoding]::Unicode是 UTF-16 LE。如果需要 UTF-16 BE,请使用[Text.Encoding]::BigEndianUnicode


编辑:再三考虑,您甚至不需要转换循环。您可以在每对十六进制字符之前插入0x,并将字符串拆分为字符,后跟序列0x,然后将生成的数组转换为字节数组。

[byte[]]($s -replace '..', '0x$&' -split '(?<=.)(?=0x)')

最新更新