1

我正在尝试编写一个为 Rocket Software 的 SBClient 构建和执行脚本文件的 PS 脚本。脚本语言使用两种不同的分隔符,þ(小写刺)(0xFE)和ü(带有变音符号的u)(0xFC)。

这些中的每一个都作为两个字符写入文件。þ 写作 þ(带波浪号和 3/4 的 A)(0xC3 0xBE)。ü 写为 ü(带波浪号和 1/4 的 A)(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)

谢谢你的帮助!

4

1 回答 1

0

你看到的是你的字符,在 ASCII 之外,被编码为 UTF-8。您在这里有两个选择:

  • 要么你[System.Text.Encoding]::GetEncoding("iso-8859-1")用来写你的文件为 Latin1
  • 或者您使用FileStream.WriteByte()结果的方法自己io.file.Open直接写入0xFE0xFC字节(似乎不那么矫枉过正,但这取决于您如何写入其余数据)
于 2015-06-26T15:37:57.757 回答