2010-02-26 16 views
9

Estoy tratando de crear/guardar archivos HTML en Perl en UTF-8, pero nada de lo que he hecho hasta ahora funciona. Un previous answer here on SO dijo usar binmode, así que lo intenté. Aquí está mi código:¿Cómo guardo un archivo como UTF-8 de Perl?

open (OUT, ">$sectionfilename"); 
binmode(OUT, ":utf8"); 
print OUT $section; 
close OUT; 

Al abrir estos archivos en un editor de texto como el Bloc de notas que todavía están en la codificación ANSI. ¿Qué estoy haciendo mal?

+0

¿Desea una BOM (marca de orden de bytes)? –

+0

¿Te refieres exclusivamente al Bloc de notas? Porque el Bloc de notas no reconocerá UTF-8 sin una lista de materiales. –

+0

No, no exclusivamente Notepad, TextPad, también. El archivo simplemente no está codificando como UTF-8. – Joshua

Respuesta

2

parece funcionar para mí:

C:\Documents and Settings>cat a.pl 
$sectionfilename = "a.txt"; 
$section = "Hello \x{263A}!\n"; 

open (OUT, ">$sectionfilename"); 
binmode(OUT, ":utf8"); 
print OUT $section; 
close OUT;  

C:\Documents and Settings>perl a.pl 

C:\Documents and Settings>file a.txt 
a.txt: UTF-8 Unicode text, with CRLF line terminators 

Pero cuando cambio el texto que se escriben en:

$section = "Hello"; 

y ejecute:

C:\Documents and Settings>perl a.pl 

C:\Documents and Settings>file a.txt 
a.txt: ASCII text, with no line terminators 
12

Un editor de texto es una herramienta deficiente para examinar cosas de bajo nivel como codificaciones. Use un hexviewer/hexdumper en su lugar. La forma moderna para escribir su ejemplo:

use autodie qw(:all); 
open my $out, '>:encoding(UTF-8)', $sectionfilename; 
print {$out} $section; 
close $out; 

autodie permite la comprobación de errores automática.

Cuestiones relacionadas