2012-06-21 5 views
8

Sto utilizzando Ruby per leggere e quindi stampare un file su stdout, reindirizzando l'output su un file in Windows PowerShell.NUL-byte tra ogni altro carattere in uscita

Tuttavia, quando ho ispezionare i file, ottengo questo per l'ingresso:

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> 

... eppure questo per l'uscita:

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 > 

Come può accadere questo?


Edit: dal momento che il mio problema non ha avuto nulla a che fare con Ruby, ho rimosso il Ruby-code, e incluso il mio utilizzo della shell di Windows.

+2

Qual è la tua piattaforma? Quel ['ÿ_'] (http://en.wikipedia.org/wiki/Byte_order_mark#UTF-16) sembra sicuramente un BOM per l'output UTF-16. – sarnold

+0

Non so perché, ma il file di output sembra essere codificato in UTF-16. – Stefan

+0

Grazie! Non avrei mai immaginato il significato di 'ÿ_'. Temo che sia specifico di Windows e non ha nulla a che fare con Ruby. I NUL-byte mi hanno fatto sospettare UTF-16, e il problema è risolto quando ho l'output di Ruby in UTF-16 ... e uso il file-out di Ruby al posto dell'operatore '>' di PowerShell. – wen

risposta

16

In PowerShell > è in pratica lo stesso di | Out-File e Out-File ha come valore predefinito la codifica Unicode. Prova questo invece di utilizzare >:

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

Grazie, questo spiega praticamente perché improvvisamente tutto è diventato pazzo quando sono passato a PowerShell! ^^ – wen

+2

C'è un modo per farlo a livello globale invece di specificare '-encoding' per ogni chiamata' Out-File'? –

+0

Inoltre ho appena notato che Out-File -Append è più probabile che causi questo problema piuttosto che semplicemente Out-File. – Arluin

Problemi correlati