Để tìm hiểu mã hóa một số thứ chưa biết, bạn chỉ cần thử và xem. Các mô-đun Encode::Detect và Encode::Guess tự động hóa điều đó. (Nếu bạn gặp khó khăn khi biên soạn Mã hóa :: Phát hiện, hãy thử ngã ba của nó Encode::Detective để thay thế.)
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);
tôi thấy encode 'ascii'
là một giải pháp què cho việc loại bỏ các ký tự ASCII. Mọi thứ sẽ được thay thế bằng các dấu hỏi; điều này là quá mất mát để có ích.
# 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.
Nếu bạn muốn văn bản ASCII có thể đọc được, tôi khuyên bạn nên Text::Unidecode thay thế. Đây cũng là một mã hóa mất dữ liệu, nhưng không phải là khủng khiếp như đồng bằng encode
ở trên.
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.
Tuy nhiên, tránh những mã hóa mất dữ liệu này nếu bạn có thể trợ giúp. Trong trường hợp bạn muốn đảo ngược hoạt động sau, hãy chọn một trong số PERLQQ
hoặc 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.
Đúng tôi nếu tôi là sai, nhưng tôi nghĩ rằng toàn bộ các điểm Unicode là nó không có "mã hóa" - mọi thứ đều ở đó. –
Bạn không có chuỗi Unicode. Bạn có một tập tin đầy đủ các byte đại diện cho một chuỗi Unicode trong một số mã hóa. Nếu bạn không biết mã hóa của tệp, hãy kiểm tra điểm đánh dấu thứ tự byte ở đầu tệp. Nếu không có BOM, bạn sẽ không may mắn. –
Có vẻ như bạn đang hỏi ít nhất hai câu hỏi riêng biệt (đoạn 1 và 2). – Amnon