Powershell Remedy ARQ文件,可能的编码问题

时间:2015-11-17 18:08:54

标签: powershell encoding powershell-v2.0 remedy

我在编辑文件时遇到问题。这是一个由票务系统BMC Remedy制作的.ARQ文件。

我可以在记事本++中打开它,编辑它,一切都很好。但是,当我尝试使用PowerShell进行编辑时,事情就搞砸了。虽然在视觉上它看起来一样,但应用程序并没有以相同的方式读取它。以下是我试图找出错误的一些测试。

测试1

get-content monitor.arq | set-content monitor2.arq

结果

Length Name
------ ----
  3578 monitor.arq
  3585 monitor2.arq 

基本上它们的大小不同,而monitor2.arq的功能与monitor.arq不同,在记事本中它们在视觉上是完全相同的

测试2

我想也许这是一个编码问题所以我试过了。

$code = @("Unicode", "UTF7", "UTF8", "UTF32", "ASCII", "BigEndianUnicode", "Default", "OEM")
for ($a = 0; $a -lt $code.count; $a++) {
    Get-Content .\monitor.arq | Out-File -Encoding $code[$a] -FilePath ".\monitor$a-$($code[$a]).arq"
}

结果

Length Name                         
------ ----                         
  3578 monitor.arq                  
  7172 monitor0-Unicode.arq         
  4911 monitor1-UTF7.arq            
  3596 monitor2-UTF8.arq            
 14344 monitor3-UTF32.arq           
  3585 monitor4-ASCII.arq           
  7172 monitor5-BigEndianUnicode.arq
  3585 monitor6-Default.arq         
  3585 monitor7-OEM.arq  

没有一个看起来是正确的,也许我在这里咆哮错误的树,但是这个文件中有纯文本我想编辑而不会破坏整个事情。

我还尝试了一个文件流(很多代码,但没有包含),但它产生了相同的结果。

根据记事本++的ANSI

根据我在网上发现的一些脚本来查看,其ASCII

我可能会做一些完全愚蠢的事情,或者对此事情不够了解以完成工作。

任何帮助都会很棒。

在评论的帮助下进行测试(感谢女士和男士们)

$content1=gc -Encoding byte monitor.arq
[System.Text.Encoding]::ASCII.GetString($content1) | out-file -Encoding ascii -FilePath .\monitor2.arq
$content2=gc -Encoding byte monitor2.arq
Compare-Object $content1 $content2

结果显示我以不想要的方式转换了哪些角色。

InputObject SideIndicator
----------- -------------
         63 =>           
         63 =>           
         63 =>           
         63 =>           
         13 =>           
         10 =>           
        201 <=           
        233 <=           
        233 <=           
        201 <=           

我知道13和10是评论中讨论的换行符,它们是在文件的末尾添加的,老实说我不认为这会影响到任何东西,因为它出现在END语句(这是BMC Remedy的宏文件)

然而,我关注的是201和233正在转换为63.关于如何阻止它的任何想法?在编写文件之前,我只是简单地转换回byte [],但是在那时我无法区分63应该是201和那些应该是203的区别。

解决

所以在评论中的每个人的帮助下,我都找到了解决方案。我自己坚持不懈地相信它是ASCII是我所做的,再加上评论中提到的换行符。

$content1=gc -Encoding byte monitor.arq
[System.Text.Encoding]::default.GetString($content1) | out-file -Encoding default -FilePath .\monitor2.arq
$content2=gc -Encoding byte monitor2.arq
Compare-Object $content1 $content2 | format-table -AutoSize

不确定谁应该发布以获得已解决的信用,但谢谢所有

1 个答案:

答案 0 :(得分:0)

$content1=gc -Encoding byte monitor.arq
[System.Text.Encoding]::default.GetString($content1) | out-file -Encoding default -FilePath .\monitor2.arq
$content2=gc -Encoding byte monitor2.arq
Compare-Object $content1 $content2 | format-table -AutoSize