Um herauszufinden, in welcher Codierung etwas unbekannt verwendet, müssen Sie nur versuchen und schauen. Die Module Encode::Detect und Encode::Guess automatisieren das. (Wenn Sie Probleme haben Kompilieren Encode :: erkennen, versuchen, seine Gabel Encode::Detective statt.)
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);
Ich finde encode 'ascii'
ist eine lahme Lösung für nicht-ASCII-Zeichen loszuwerden. Alles wird durch Fragezeichen ersetzt; Das ist zu verlustreich, um nützlich zu sein.
# 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.
Wenn Sie lesbaren ASCII-Text wollen, empfehle ich Text::Unidecode statt. Auch dies ist eine verlustbehaftete Kodierung, aber nicht so schlimm wie einfach encode
oben.
Vermeiden Sie jedoch diese verlustreichen Codierungen, wenn Sie es helfen können. Falls Sie den Vorgang später rückgängig machen möchten, wählen Sie entweder PERLQQ
oder 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.
mich korrigieren zu entschlüsseln, wenn ich falsch liege, aber ich dachte, der ganze Sinn von Unicode ist, dass es nicht existiert eine "Kodierung" - alles ist da. –
Sie haben keine Unicode-Zeichenfolge. Sie haben eine Datei voller Bytes, die eine Unicode-Zeichenfolge in einer Codierung darstellen. Wenn Sie die Kodierung der Datei nicht kennen, prüfen Sie am Anfang der Datei nach einem Byte-Order-Marker. Wenn es keine Stückliste gibt, hast du kein Glück. –
Es sieht so aus, als ob Sie mindestens zwei separate Fragen stellen (1. und 2. Absatz). – Amnon