A ver... cuando yo te digo que necesitamos ver una salida en hexadecimal, me refiero a ver algo como esto:
Using text Syntax Highlighting
explorer@casa:~/Documents/Desarrollo> hexdump -C ucs2.txt
00000000 45 73 74 6f 20 65 73 20 75 6e 61 20 70 72 75 65 |Esto es una prue|
00000010 62 61 20 64 65 20 75 63 73 32 2e 20 e1 e9 ed f3 |ba de ucs2. ....|
00000020 fa f1 d1 0a |....|
00000024
explorer@casa:~/Documents/Desarrollo> hexdump -C utf8.txt
00000000 45 73 74 6f 20 65 73 20 75 6e 61 20 70 72 75 65 |Esto es una prue|
00000010 62 61 20 64 65 20 75 63 73 32 2e 20 c3 a1 c3 a9 |ba de ucs2. ....|
00000020 c3 ad c3 b3 c3 ba c3 b1 c3 91 0a |...........|
0000002b
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Si no, no sabremos de qué estamos hablando.
Y no es lo mismo
bytes que
bits.
Yo no creo que sean espacios lo que estás viendo, sino bytes 0, pero claro, no lo sabemos.
Yo he hecho una prueba. Dado el fichero 1252.txt:
Using text Syntax Highlighting
explorer@casa:~/Documents/Desarrollo> hexdump -C 1252.txt
00000000 50 72 75 65 62 61 3a 5b e1 e9 ed f3 fa f1 d1 5d |Prueba:[.......]|
00000010 0a |.|
00000011
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
que visualmente es:
Prueba:[áéíóúñÑ]. Codificado un byte por carácter, muy similar a la iso-8859-1.
Luego, con el programa
Using perl Syntax Highlighting
use open IN
=> ":encoding(cp1252)", OUT
=> ":encoding(ucs-2le)";
my $entrada_fichero = '1252.txt';
my $salida_fichero = 'ucs2.txt';
open my $FILE, '<', $entrada_fichero;
open my $COPIA, '>', $salida_fichero or die "ERROR: $!\n";
read $FILE, my $buffer, -s $entrada_fichero;
print $COPIA $buffer;
close $FILE;
close $COPIA;Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
sale el fichero ucs2.txt:
Using text Syntax Highlighting
explorer@casa:~/Documents/Desarrollo> hexdump -C ucs2.txt
00000000 50 00 72 00 75 00 65 00 62 00 61 00 3a 00 5b 00 |P.r.u.e.b.a.:.[.|
00000010 e1 00 e9 00 ed 00 f3 00 fa 00 f1 00 d1 00 5d 00 |..............].|
00000020 0a 00 |..|
00000022
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Como ves, la salida está en formato ucs-2le (16 bits por carácter).
Así que el programa tuyo, funciona, al menos, en mi ordenador (que, además, no es Windows).