Saya mencoba menulis skrip Perl menggunakan pragma "utf8", dan saya mendapatkan hasil yang tidak diharapkan. Saya menggunakan Mac OS X 10.5 (Leopard), dan saya mengedit dengan TextMate. Semua pengaturan saya untuk editor dan sistem operasi saya secara default menulis file dalam format utf-8.
Namun, ketika saya memasukkan yang berikut ini ke dalam file teks, menyimpannya sebagai ".pl", dan menjalankannya, saya mendapatkan "berlian dengan tanda tanya" sebagai pengganti karakter non-ASCII.
#!/usr/bin/env perl -w
use strict;
use utf8;
my $str = 'Çirçös';
print( "$str\n" );
Tahu apa yang saya lakukan salah? Saya berharap mendapatkan 'Çirçös' di output, tetapi saya mendapatkan ' ir s' sebagai gantinya.
utf8
:Jawaban:
use utf8;
tidak mengaktifkan keluaran Unicode - ini memungkinkan Anda untuk mengetik Unicode dalam program Anda. Tambahkan ini ke program, sebelumprint()
pernyataan Anda :Lihat apakah itu membantu. Itu harus membuat
STDOUT
keluaran dalam UTF-8, bukan ASCII biasa.sumber
Anda bisa menggunakan pragma terbuka .
Misalnya. di bawah ini menetapkan STDOUT, STDIN & STDERR untuk menggunakan UTF-8 ....
sumber
TMTOWTDI , pilih metode yang paling sesuai dengan cara Anda bekerja. Saya menggunakan metode lingkungan jadi saya tidak perlu memikirkannya.
Di lingkungan :
di baris perintah :
atau dengan binmode :
atau dengan PerlIO :
atau dengan pragma terbuka :
sumber
SDL
tersirat baik dengan-C
danPERL_UNICODE
. Theuse open ':locale'
pragma juga layak disebutkan, karena itu adalah di-script setara-C
danexport PER_UNICODE=
. Salah satu dari 3 ini akan memberi Anda dukungan UTF8 untuk semua aliran input dan output (baik file atau stdin / stdout / stderr), dengan asumsi lokal lingkungan Anda berbasis UTF8. Terakhir, untuk juga memperlakukan kode sumber sebagai UTF8, gunakanuse utf8;
pragma.perl -Mutf8 -CSDL -e '...'
memungkinkan untuk mengkonsumsi / mengeluarkan UTF-8 serta menggunakan literal UTF-8 di dalam-e
misalnya untuk folder kasus orang miskin:perl -Mutf8 -CASDL -pe 'y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜ/'
Anda juga ingin mengatakan, bahwa string dalam kode Anda adalah utf-8. Lihat Mengapa Perl modern menghindari UTF-8 secara default? . Jadi atur tidak hanya
PERL_UNICODE=SDAL
tapi jugaPERL5OPT=-Mutf8
.sumber
Terima kasih, akhirnya mendapat solusi untuk tidak meletakkan utf8 :: encode di seluruh kode. Untuk mensintesis dan menyelesaikan kasus lain, seperti menulis dan membaca file di utf8 dan juga bekerja dengan LoadFile dari file YAML di utf8
di mana cache.yaml adalah:
sumber
lakukan di shell Anda: $ env | grep LANG
Ini mungkin akan menunjukkan bahwa shell Anda tidak menggunakan lokal utf-8.
sumber