Aquí hay dos ejemplos para ayudarle a entender los errores:
[email protected]: ~/Milu/Dev/Perl > cat malformed-utf8-char.pl
use utf8; # script source must be in UTF-8
use strict;
use warnings;
print "K�se\n";
[email protected]: ~/Milu/Dev/Perl > perl malformed-utf8-char.pl
Malformed UTF-8 character (unexpected non-continuation byte 0x73,
immediately after start byte 0xe4) at malformed-utf8-char.pl line 4.
Kse
La fuente está en Latin-1, mi terminal está en UTF-8. La cadena es en realidad "Käse". El pragma utf8
debe eliminarse o la fuente debe guardarse en UTF-8.
[email protected]: ~/Milu/Dev/Perl > cat wide-char-in-print.pl
use utf8;
use strict;
use warnings;
# binmode STDOUT, ':utf8';
print "Группа сайтов РИА Новости\n";
[email protected]: ~/Milu/Dev/Perl > perl wide-char-in-print.pl
Wide character in print at wide-char-in-print.pl line 5.
Группа сайтов РИА Новости
La fuente contiene caracteres cirílico, de ahí el utf8
pragma está en orden. Sin embargo, para imprimir esos caracteres en el terminal, STDOUT
también debe establecerse en UTF-8, lo que puede lograr llamando al binmode
. Si no lo hace, se activa una advertencia ya que un carácter ancho (Unicode más allá de 0x255) no entra por un canal de salida estrecho (byte). Todavía se verá correctamente, porque Perl simplemente generará los bytes tal como son, lo que luego parece correcto.
en mi opinión esta es la mejor respuesta porque en vez de decirle a los nuevos programadores cómo desactivar la advertencia "molesta", lo cual no debes hacer si no entiendes por qué los obtienes, te dice cómo evitar recibir esa advertencia en primer lugar. La mayoría de las advertencias están ahí para ayudarlo a solucionar un problema de su lado. Escuché en alguna parte que el 99.999% de las veces, el programador, no la computadora/compilador/intérprete es el problema. Es fácil apagar esta advertencia, pero tener el hábito de simplemente cerrar las molestias es malo, por decir lo menos. – osirisgothra