2012-06-21 81 views
8

我使用Ruby來讀取然後將文件打印到標準輸出,將輸出重定向到Windows PowerShell中的文件。輸出中每隔一個字符之間的NUL字節

然而,當我檢查的文件,我得到這個對於輸入:

PS D:> head -n 1 .\inputfile 
<text id="http://observer.guardian.co.uk/osm/story/0,,1009777,00.html">   <s>    Hooligans  NNS  hooligan 
       ,  ,  ,    unbridled  JJ  unbridled    passion NN  passion 
-  :  -    and  CC  and    no  DT  no    executive  JJ  executiv 
e    boxes NNS  box    .  SENT .    </s> 

......然而,這對於輸出:

PS D:> head -n 1 .\outputfile 
ÿ_< t e x t i d = " h t t p :// o b s e r v e r . g u a r d i a n . c o . u k/o s m/s t o r y/0 , , 1 0 0 9 7 7 7 , 0 
0 . h t m l " >     <s>   H o o l i g a n s  N N S h o o l i g a n     ,  , 
,    u n b r i d l e d  J J  u n b r i d l e d    p a s s i o n N N  p a s s i o n 
-  :  -    a n d C C  a n d   n o  D T  n o    e x e c u t i v e  J J 
e x e c u t i v e    b o x e s  N N S b o x   .  S E N T   .    </s > 

怎麼能這樣呢?


編輯:因爲我的問題,沒有任何與紅寶石,我已經刪除了Ruby代碼,並列入我的Windows外殼程序的使用。

+2

你的平臺是什麼?那[[ÿ_']](http://en.wikipedia.org/wiki/Byte_order_mark#UTF-16)看起來像UTF-16輸出的BOM。 – sarnold

+0

不知道爲什麼,但輸出文件似乎是UTF-16編碼。 – Stefan

+0

謝謝!我從來沒有猜到「ÿ_」的意思。我擔心它是Windows特有的,與Ruby無關。 NUL字節讓我懷疑UTF-16,當我以UTF-16格式輸出Ruby時,問題確實解決了......並且使用Ruby的文件輸出而不是PowerShell的'>'運算符。 – wen

回答

16

在PowerShell中>實際上與| Out-File相同,並且Out-File默認爲Unicode編碼。試試這個而不是使用>

... | Out-File outputfile -encoding ASCII 
+0

謝謝,這很好的解釋了爲什麼當我切換到PowerShell時突然間一切都變得瘋狂! ^^ – wen

+2

有沒有辦法做到這一點,而不是爲每個'Out-File'調用指定'-encoding'? –

+0

另外我只注意到Out-File -Append更可能導致此問題,而不僅僅是簡單的Out-File。 – Arluin

相關問題