Cách chính xác để viết một lớp lót nhận biết Unicode trong Perl là gì? Cách rõ ràng:ghi Unicode một-liners trong Perl
$ echo 'フーバー' | perl -lne 'print if /フ/'
フーバー
... kinda xuất hiện để làm việc trên cái nhìn đầu tiên, nhưng đây chỉ là một tai nạn: Unicode được hiểu như là byte như ví dụ tiếp theo cho thấy:
$ echo 'フーバー != フウバー' | perl -mString::Diff=diff -lne 'print join(" ", diff($1, $2)) if /(.*)!=(.*)/' => 29
フ?[??]バー[ ] { }フ?{??}バー
Chỉ cần sử dụng cờ -C
để thiết lập STDIN
/STDOUT
, vv sang UTF-8 là không đủ bởi chính nó:
$ echo 'フーバー' | perl -C -lne 'print if /フ/'
[no output]
... bởi vì bây giờ văn bản trong -e
không được hiểu là Unicode.
Vì vậy, đây là con đường để đi (giả sử một LOCALE lành mạnh - có nghĩa là, một trong các hình thức "*.UTF‑8"
) như thế này:
$ perl -C -Mutf8 [...]
Bạn có ý nghĩa gì khi lệnh 'echo' không độc lập với miền địa phương? – tchrist
'$ LANG = ja_JP.sjis bash $ echo -n フ | uniquote -b ¥ x83t $ echo -n フ | hex0000 83 74' so với '$ LANG = de_AT.UTF-8 bash $ echo -n フ | uniquote -b \ xE3 \ x83 \ x95 $ echo -n フ | hex0000 e3 83 95' – daxim