如何让 powershell 将 þ(小写 thorn)作为 0xfe 写入文件?
How can I get powershell to write þ (lowercase thorn) to a file as 0xfe?
我正在尝试编写一个 PS 脚本来为 Rocket Software 的 SBClient 构建和执行脚本文件。脚本语言使用两种不同的分隔符,þ(小写刺)(0xFE) 和 ü(带变音符号的 u)(0xFC)。
其中每一个都以两个字符的形式写入文件。 þ 写为 þ(带波浪号和 3/4 的 A)(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)
感谢您的帮助!
您看到的是您的字符,在 ASCII 之外,被编码为 UTF-8。您在这里有两个选择:
- 要么你使用
[System.Text.Encoding]::GetEncoding("iso-8859-1")
将你的文件写成 Latin1
- 或者你用
io.file.Open
结果的FileStream.WriteByte()
方法自己直接写0xFE
和0xFC
字节(好像没那么大材小用,不过要看怎么写你写剩下的数据)
我正在尝试编写一个 PS 脚本来为 Rocket Software 的 SBClient 构建和执行脚本文件。脚本语言使用两种不同的分隔符,þ(小写刺)(0xFE) 和 ü(带变音符号的 u)(0xFC)。
其中每一个都以两个字符的形式写入文件。 þ 写为 þ(带波浪号和 3/4 的 A)(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)
感谢您的帮助!
您看到的是您的字符,在 ASCII 之外,被编码为 UTF-8。您在这里有两个选择:
- 要么你使用
[System.Text.Encoding]::GetEncoding("iso-8859-1")
将你的文件写成 Latin1 - 或者你用
io.file.Open
结果的FileStream.WriteByte()
方法自己直接写0xFE
和0xFC
字节(好像没那么大材小用,不过要看怎么写你写剩下的数据)