Para saber en qué codificación utiliza algo desconocido, solo tiene que intentarlo. Los módulos Encode::Detect y Encode::Guess automatizan eso. (Si tiene problemas para compilar Codificar :: Detect, intente su tenedor Encode::Detective en su lugar.)
use Encode::Detect::Detector;
my $unknown = "\x{54}\x{68}\x{69}\x{73}\x{20}\x{79}\x{65}\x{61}\x{72}\x{20}".
"\x{49}\x{20}\x{77}\x{65}\x{6e}\x{74}\x{20}\x{74}\x{6f}\x{20}".
"\x{b1}\x{b1}\x{be}\x{a9}\x{20}\x{50}\x{65}\x{72}\x{6c}\x{20}".
"\x{77}\x{6f}\x{72}\x{6b}\x{73}\x{68}\x{6f}\x{70}\x{2e}";
my $encoding_name = Encode::Detect::Detector::detect($unknown);
print $encoding_name; # gb18030
use Encode;
my $string = decode($encoding_name, $unknown);
encuentro encode 'ascii'
es una solución cojo para deshacerse de caracteres no ASCII. Todo será sustituido con signos de interrogación; esto es demasiado siniestro para ser útil.
# Bad example; don't do this.
use utf8;
use Encode;
my $string = 'This year I went to 北京 Perl workshop.';
print encode('ascii', $string); # This year I went to ?? Perl workshop.
Si desea que el texto ASCII legible, recomiendo Text::Unidecode lugar. Esto también es una codificación con pérdida, pero no tan terrible como el encode
anterior.
use utf8;
use Text::Unidecode;
my $string = 'This year I went to 北京 Perl workshop.';
print unidecode($string); # This year I went to Bei Jing Perl workshop.
Sin embargo, evite esas codificaciones con pérdida si puede evitarlo. En caso de que desee revertir la operación más tarde, elija cualquiera de PERLQQ
o XMLCREF
.
use utf8;
use Encode qw(encode PERLQQ XMLCREF);
my $string = 'This year I went to 北京 Perl workshop.';
print encode('ascii', $string, PERLQQ); # This year I went to \x{5317}\x{4eac} Perl workshop.
print encode('ascii', $string, XMLCREF); # This year I went to 北京 Perl workshop.
corrígeme si me equivoco, pero pensé que todo el punto de Unicode es que no tiene una "codificación" - todo está allí. –
No tiene una cadena Unicode. Tiene un archivo lleno de bytes que representa una cadena Unicode en alguna codificación. Si no conoce la codificación del archivo, luego busque un marcador de orden de bytes al comienzo del archivo. Si no hay una lista de materiales, no tienes suerte. –
Parece que está haciendo al menos dos preguntas separadas (1er y 2do párrafo). – Amnon