Qual è il modo corretto di scrivere one-liner con riconoscimento Unicode in Perl? Il modo ovvio:Scrittura di one-liner con riconoscimento Unicode in Perl
$ echo 'フーバー' | perl -lne 'print if /フ/'
フーバー
... sembra un pò per lavorare a prima vista, ma questo è solo un incidente: l'Unicode viene interpretato come byte come illustrato nell'esempio seguente:
$ echo 'フーバー != フウバー' | perl -mString::Diff=diff -lne 'print join(" ", diff($1, $2)) if /(.*)!=(.*)/' => 29
フ?[??]バー[ ] { }フ?{??}バー
Usando solo la bandiera -C
per impostare la STDIN
/STDOUT
ecc a UTF-8 non è sufficiente di per sé:
$ echo 'フーバー' | perl -C -lne 'print if /フ/'
[no output]
... perché ora il testo in -e
non viene interpretato come Unicode.
Quindi questa è la strada da percorrere (assumendo una LOCALE sano di mente - che è, uno in forma "*.UTF‑8"
) come questo:
$ perl -C -Mutf8 [...]
Cosa vuoi dire se il comando 'echo' non è indipendente dalla locale? – tchrist
'$ LANG = ja_JP.sjis bash $ echo -n フ | uniquote -b ¥ x83t $ echo -n フ | hex0000 83 74' vs. '$ LANG = de_AT.UTF-8 bash $ echo -n フ | uniquote -b \ xE3 \ x83 \ x95 $ echo -n フ | hex0000 e3 83 95' – daxim