2012-06-21 8 views
8

Estoy usando Ruby para leer y luego imprimir un archivo en stdout, redireccionando la salida a un archivo en Windows PowerShell.NUL-byte entre cualquier otro carácter en la salida

Sin embargo, cuando examino los archivos, consigo este para la entrada:

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> 

... sin embargo esto para la salida:

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 > 

¿Cómo puede suceder esto?


Editar: ya que mi problema no tiene nada que ver con Ruby, he eliminado el Rubí de código, e incluido mi uso de la shell de Windows.

+2

¿Cuál es su plataforma? Que ['ÿ_'] (http://en.wikipedia.org/wiki/Byte_order_mark#UTF-16) parece una BOM para la salida UTF-16. – sarnold

+0

No sé por qué, pero su archivo de salida parece estar codificado en UTF-16. – Stefan

+0

Gracias! Nunca hubiera adivinado el significado de 'ÿ_'. Me temo que es específico de Windows y no tiene nada que ver con Ruby. Los NUL-bytes me hicieron sospechar de UTF-16, y el problema se resuelve cuando tengo la salida de Ruby en UTF-16 ... y uso el archivo de salida de Ruby en lugar del operador '>' de PowerShell. – wen

Respuesta

16

En PowerShell > es efectivamente lo mismo que | Out-File y Out-File tiene como valor predeterminado la codificación Unicode. Pruebe esto en lugar de usar >:

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

¡Gracias, esto explica por qué todo se volvió loco de repente cuando cambié a PowerShell! ^^ – wen

+2

¿Hay alguna manera de hacerlo globalmente en lugar de especificar '-encoding' para cada llamada' Out-File'? –

+0

También acabo de notar Out-File -Append es más probable que cause este problema que simplemente Out-File. – Arluin

Cuestiones relacionadas