Я читаю файл XML, чтобы удалить дубликаты песен в ритмбоксе.
Однако есть много странных символов, которые я не могу найти ни в рифме, ни в имени файла. Они не просто побеги.
Я использую XML::Hash
в Perl.
Например, я обнаружил, что
%20
означает один пробел.
%5B
означает [
, а %5D
означает ]
Какие символы мне нужно экранировать в XML документы? и http://www.escapecodes.info/ близки к тому, что я хочу, но не предоставили никакой полезной информации
Я читаю https://metacpan.org/pod/XML :: Ha sh и я не вижу никаких советов по поводу этих символов.
Я мог бы конвертировать каждый символ назад и вперед, но должен быть более элегантный и читаемый способ сделать это. Поиски в Google ничего не нашли.
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
use diagnostics;
use feature 'say';
use autodie ':all';
use File::Slurp;
use XML::Hash;
use DDP;
use utf8::all;
my $xml_converter = XML::Hash -> new();
my $xml_data = read_file('/home/con/Downloads/rhythmdb.xml');
my $xml_hash = $xml_converter->fromXMLStringtoHash($xml_data);
#p $xml_hash->{rhythmdb}{entry}[0];
my %files_found;
my $new_hash;
my $new_index = 0;
foreach my $song_index (0..scalar @{ $xml_hash->{rhythmdb}{entry} } - 1 ) {
my $file;
if (defined $xml_hash->{rhythmdb}{entry}[$song_index]{location}{text}) {
$file = $xml_hash->{rhythmdb}{entry}[$song_index]{location}{text}
} else {
say 'can\'t get file.';
p $xml_hash->{rhythmdb}{entry}[$song_index];
die
}
$file =~ s/^file:\/\///;
# $file =~ s/%20/ /g;
# $file =~ s/%5B/\[/g;
# $file =~ s/%5D/\]/g;
$new_hash->{rhythmdb}{entry}[$new_index] = $xml_hash->{rhythmdb}{entry}[$song_index];
$new_index++;
}
Есть ли более элегантный / идиоматический c способ преобразования всех этих загадочных символов?