我正在尝试编写一个PS脚本,为Rocket Software的SBClient构建并执行脚本文件。脚本语言使用两个不同的分隔符,þ(小写刺)(0xFE)和ü(u与变音符号)(0xFC)。
每个都以两个字符写入文件。 þ写为Ã(A与波浪号和3/4)(0xC3 0xBE)。 ü写成Ã(A与波浪号和1/4)(0xC3 0xBC)。
我尝试了多种不同的方法来编写文件,每次都以相同的方式出现。我确定这是因为这些是扩展的ASCII字符。
有没有办法用正确的双字符十六进制代码将这些文件写入文本文件而不将字符串转换为十六进制并写入二进制文件?如果没有,为此将字符串转换为十六进制的最佳方法是什么?我在其他语言中看到了一些不同的例子,但在PS中没有什么可靠的。
看起来我可以将字符串转换为字节数组,然后使用io.file::WriteAllBytes()
来编写文件。我只是希望有更好的方法来做到这一点。
以下是相关代码......
$ScriptFileContent = 'TUSCRIPTþþþ[Company Name] Logon Please:þ{enter}üPST{enter}þ2þ'
$ScriptFilePath = ([Environment]::GetFolderPath("ApplicationData")).ToString() + "\Rocket Software\SBClient\tuscript\NT"
out-file -filepath $ScriptFilePath -inputobject $ScriptFileContent -encoding ascii
解决方案
$enc = [System.Text.Encoding]::GetEncoding("iso-8859-1")
$ScriptFileContent = 'TUSCRIPTþþþ[Company Name] Logon Please:þ{enter}üPST{enter}þ2þ'
$ScriptFileContent = $enc.GetBytes($ScriptFileContent)
$ScriptFilePath = ([Environment]::GetFolderPath("ApplicationData")).ToString() + "\Rocket Software\SBClient\tuscript\NT"
[io.file]::WriteAllBytes($ScriptFilePath, $ScriptFileContent)
感谢您的帮助!
答案 0 :(得分:0)
你所看到的是你的字符,在ASCII之外,被编码为UTF-8。你有两个选择:
[System.Text.Encoding]::GetEncoding("iso-8859-1")
将文件写为Latin1 FileStream.WriteByte()
结果的io.file.Open
方法直接自己编写0xFE
和0xFC
字节(看起来不那么过分,但这取决于您的编写方式其余的数据)