2016-11-21 2 views
0

Ich muss die Fraktur Symbole in die Named Entity konvertieren:Fraktur Symbole in Umwandlung Entities mit Perl

my $input = ", , is a symbols of fraktur"; 

Erwartete Ausgabe:

$output = "𝔄, 𝔅, 𝔇 is a symbols of fraktur"; 

Code:

use Win32; 
use open ':encoding(utf8)'; 
binmode STDOUT, ':utf8'; 

my %fraktursChr = ("𝔄" => "", "𝔅" => "", "𝔇" => ""); 

foreach my $key (keys %fraktursChr) 
{ 
    print "Key: $key-->$fraktursChr{$key}\n "; 
    $input=~s/\Q$fraktursChr{$key}\E/$key/g; 
} 

aber ich konnte die Symbole mit utf8 nicht ersetzen: Ich würde mich freuen, wenn jemand hier helfen könnte.

+0

Ihre erwartete Ausgabe ist falsch. Sie fehlen Semikolons ';' und Sie haben ein zusätzliches Komma, das nicht in der Eingabe ist. – simbabque

+0

@simbabque: Ich habe die Frage – ssr1012

+1

aktualisiert. Tipp: 'use open ': encoding (utf8)'; binmode STDOUT, ': utf8'; 'kann als' use open 'geschrieben werden: std', ': encoding (utf8)'; '(obwohl das auch STDIN und STDERR beeinflusst). – ikegami

Antwort

2

use utf8; muss hinzugefügt werden, um Perl mitzuteilen, dass der Quellcode mit UTF-8 codiert ist.

use utf8;        # Source code is encoded using UTF-8. 
use open ':std', ':encoding(UTF-8)'; # Terminal expects/provides UTF-8. 

my $input = ", , is a symbols of fraktur"; 
my %fraktursChr = ("𝔄" => "", "𝔅" => "", "𝔇" => "",); 
foreach my $key (keys %fraktursChr) 
{ 
    $input=~s/\Q$fraktursChr{$key}\E/$key/g; 
} 

print $input; 

Dank PerlDuck und Dave Cross.

+0

@ikegami: Gut gesagt: – ssr1012

1

nicht wirklich eine Antwort, aber ein Vorschlag für eine Leistungsverbesserung:

my $fraktursChr_pat = join '|', map quotemeta, keys %fraktursChr; 
my $fraktursChr_re = qr/($fraktursChr_pat)/; 

$input =~ s/$fraktursChr_re/$fraktursChr{$1}/g;