Bu, Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü gibi birden fazla ücretsiz çevrimiçi iş istasyonumuzdan birini kullanarak OnWorks ücretsiz barındırma sağlayıcısında çalıştırılabilen perlunicode komutudur.
Program:
ADI
perlunicode - Perl'de Unicode desteği
TANIM
Henüz yapmadıysanız, bu belgeyi okumadan önce her ikisine de aşina olmalısınız.
perlunitut ve perluniintro.
Unicode'un amacı UNI-fy-KODdünyadaki tüm karakter kümelerinin sesleri tek bir yerde
Standart. Unicode'un geliştirildiği dönemde var olan çeşitli kodlama standartlarının pek çoğu için
ilk yaratıldığında, her birini Unicode'a dönüştürmek aslında her birine bir sabit eklemek anlamına geliyordu
orijinal standarttaki kod noktasıydı ve geri dönüştürmek yalnızca aynısını çıkarmak anlamına geliyordu
devamlı. ASCII ve ISO-8859-1 için sabit 0'dır. ISO-8859-5 için (Kiril)
sabit 864'tür; İbranice (ISO-8859-8) için 1488; Tay dili (ISO-8859-11), 3424; ve bu yüzden
ileri. Bu, dönüşümlerin yapılmasını kolaylaştırdı ve Unicode'un benimsenmesini kolaylaştırdı.
Ve işe yaradı; günümüzde bu eski standartlar nadiren kullanılmaktadır. Herkesin kullandığı çoğu şey
Unicode.
Unicode kapsamlı bir standarttır. Perl'ün kapsamı dışındaki birçok şeyi belirtir,
karakter dizilerinin nasıl görüntüleneceği gibi. Tüm yönleriyle ilgili tam bir tartışma için
Unicode, bkz.http://www.unicode.org>.
Hatırlatma Uyarılar
Her ne kadar bu bölümün bir kısmı ilk okuyuşta sizin için anlaşılır olmasa da, biz
daha fazla ayrıntıya girmeden önce bazı önemli noktaları vurgulamanın yeterince önemli olduğunu düşünüyorum, bu yüzden
işte şöyle:
Unicode desteği kapsamlı bir gerekliliktir. Perl Unicode'u uygulamasa da
standart ya da beraberindeki teknik raporları baştan sona kadar Perl pek çok şeyi desteklemektedir.
Unicode özellikleri.
Ayrıca Unicode kullanımı bariz olmayan güvenlik sorunlarına yol açabilir. Unicode'u okuyun
Güvenlik Hususlarıhttp://www.unicode.org/reports/tr36>.
"'unicode_strings' özelliğini kullanırsanız" en güvenlisi
Geriye dönük uyumluluğu korumak için Perl tam dahili özelliği açmaz.
Pragma "'unicode_strings' özelliğini kullan" belirtilmediği sürece Unicode desteği. (Bu
"5.012" veya üzerini kullanıyorsanız otomatik olarak seçilir.) Bunu yapmamak,
beklenmedik sürprizleri tetikler. Aşağıdaki "Unicode Hatası"na bakın.
Bu pragma G/Ç'yi etkilemez. Aynı zamanda dahili temsilini de değiştirmez.
dizeler, yalnızca bunların yorumlanması. Hala Unicode'un kullanıldığı birkaç yer var.
dosya adlarında olduğu gibi tam olarak desteklenmez.
Giriş ve Çıkış Katmanları
kullanarak dosya tanıtıcılarından okumak ve yazmak için ":encoding(...)" katmanını kullanın.
belirtilen kodlama (bkz: açık)
ASCII olmayan, UTF-8 olmayan Perl komut dosyalarınızı UTF-8'e dönüştürmelisiniz.
Bkz. kodlama.
Komut dosyalarında UTF-8'i etkinleştirmek için hâlâ "utf8 kullan" gerekiyor
Perl betiğinizin kendisi UTF-8 olarak kodlanmışsa, "utf8 kullan" pragması şöyle olmalıdır:
Bunun tanınmasını sağlamak için açıkça dahil edilmiştir (dize veya normal ifadede)
değişmez değerlerde veya tanımlayıcı adlarda). Bu is the bir tek zaman ne zaman an açık "kullanmak utf8"
is gerekli. (bkz. utf8).
"BOM" işaretli komut dosyaları ve UTF-16 komut dosyaları otomatik olarak algılandı
Ancak bir Perl betiği Unicode "BOM" (UTF-16LE, UTF16-BE veya
UTF-8) veya komut dosyası "BOM" işaretli olmayan UTF-16 gibi görünüyorsa, her iki endianness'tan biri de Perl'dir.
komut dosyasında uygun Unicode kodlaması olarak doğru şekilde okunacaktır. ("BOM"-daha az
UTF-8 etkili bir şekilde tanınamaz veya ISO 8859-1 veya diğer standartlardan farklılaştırılamaz
sekiz bitlik kodlamalar.)
Bayt ve Karakter Anlambilim
Unicode'dan önce çoğu kodlama, her karakteri kodlamak için 8 bit (tek bir bayt) kullanıyordu. Böylece
bir karakter bir bayttı ve bir bayt bir karakterdi ve yalnızca 256 veya daha az sayıda karakter olabilirdi.
olası karakterler. Bu bölümün başlığındaki "Bayt Anlambilimi" bunu ifade eder
davranış. "Bayt" ile "Karakter" arasında ayrım yapmaya gerek yoktu.
Sonra bir milyondan fazla karaktere yer veren Unicode gelir (ve Perl buna izin verir).
hatta daha fazla). Bu, bir karakterin temsil edilmesi için tek bir bayttan daha fazlasını gerektirebileceği anlamına gelir
öyle ve dolayısıyla iki terim artık eşdeğer değil. Karakterlerin ne önemi var
tüm varlıklar ve genellikle onları oluşturan baytlar değil. Terim budur
Bu bölümün başlığında “Karakter Semantiği” ifade edilmektedir.
Perl, "baytları" "karakterlerden" ayırmak için dahili olarak değişiklik yapmak zorunda kaldı. Bu önemlidir
Henüz yapmadıysanız siz de fikirlerinizi değiştirirsiniz, böylece "bayt" ve "karakter" hayır
artık aklınızda aynı şeyi ifade ediyor.
Perl dizelerinin temel yapı taşı her zaman bir "karakter" olmuştur. Değişiklikler
temel olarak uygulamanın artık bir karakterin her zaman olduğunu düşünmediğine inmek
yalnızca tek bir bayt.
Dikkat edilmesi gereken çeşitli noktalar vardır:
· Dize işleme işlevleri çoğunlukla şu terimlerle çalışmaya devam eder:
karakterler. Örneğin "uzunluk()", bir dizedeki karakter sayısını döndürür,
tıpkı daha önce olduğu gibi. Ancak bu sayının artık mutlaka aynı olması gerekmiyor.
dizedeki baytlar (karakterlerden daha fazla bayt olabilir). Diğeri böyle
işlevler arasında "chop()", "chomp()", "substr()", "pos()", "index()", "rindex()",
"sort()", "sprintf()" ve "write()".
İstisnalar şunlardır:
· bit odaklı "vec"
Bayt odaklı "paketleme"/"paketten çıkarma" "C" formatı
Ancak "W" belirticisi, "U" gibi tüm karakterler üzerinde çalışır.
belirleyici.
· platformun işletim sistemiyle etkileşime giren bazı operatörler
Dosya adlarıyla ilgilenen operatörler buna örnektir.
· işlevler "bayt kullan" pragması kapsamında çağrıldığında
Muhtemelen bunu yalnızca hata ayıklama için kullanmalısınız.
· Dizeler (karma anahtarlar dahil) ve düzenli ifade kalıpları karakterler içerebilir
Sıra değerleri 255'ten büyük olan
Programınızı düzenlemek için bir Unicode düzenleyici kullanıyorsanız Unicode karakterler oluşabilir
doğrudan UTF-8 kodlamasındaki veya UTF-16'daki değişmez dizelerin içinde. (Eski
bir "BOM" veya "utf8 kullan" gerektirir; ikincisi bir "BOM" gerektirir.)
Perluniintro'daki "Unicode Oluşturma", ASCII olmayan karakterleri yerleştirmenin başka yollarını sunar
senin dizelerin.
· "chr()" ve "ord()" işlevleri tüm karakterler üzerinde çalışır.
· Düzenli ifadeler tam karakterlerle eşleşir. Örneğin, "." bir bütünle eşleşir
yalnızca tek bir bayt yerine karakter.
· "tr///" operatörü tüm karakterleri çevirir. ("tr///CU" olduğuna dikkat edin.)
işlevsellik kaldırıldı. Buna benzer işlevsellik için bkz. "pack('U0',
...)" ve "paket('C0', ...)").
· "skaler ters()" bayt yerine karaktere göre tersine çevirir.
· Bit dizisi operatörleri, "& | ^ ~" ve (v5.22'den başlayarak) "&. |. ^. ~." çalışabilir
bir bayta sığmayan karakterler üzerinde. Ancak mevcut davranışın muhtemelen
değiştirmek. Bu operatörleri UTF-8 ile kodlanmış dizelerde kullanmamalısınız. Eğer
Bir dizenin kodlanmasından emin değilseniz, bunlardan herhangi birini kullanmadan önce eski sürüme geçirin
operatörler; "utf8::utf8_downgrade()" komutunu kullanabilirsiniz.
Sonuç olarak Perl her zaman "Karakter Anlambilimi" üzerinde çalışmıştır, ancak
Unicode'un ortaya çıkışı, artık "Byte Semantics"ten farklıdır.
ASCII kurallar karşı Unicode kurallar
Unicode'dan önce, bir karakter bir bayt iken, Perl yalnızca 128'i biliyordu.
ASCII tarafından tanımlanan karakterler, 0'dan 127'ye kadar kod noktaları ("yerel ayarı kullan" altı hariç).
Bu, 128'den 255'e kadar olan kod noktalarını atanmamış olarak bıraktı ve herhangi bir kullanım için mevcuttu.
program isteyebilir. Sahip oldukları tek anlam, sıra sayılarıdır ve
negatif olmayan karakter sınıflarının hiçbirinin üyesi değildir. Hiçbirinin eşleştiği düşünülmüyor
Örneğin "\w", ancak tümü "\W" ile eşleşiyor.
Unicode elbette bu kod noktalarının her birine belirli bir anlam atar (ile birlikte)
255'in üzerinde olanlar). Geriye dönük uyumluluğu korumak için Perl yalnızca Unicode anlamlarını kullanır
Unicode'un amaçlanan şey olduğuna dair bazı göstergeler olduğunda; aksi takdirde ASCII olmayan
kod noktaları atanmamış gibi muamele görmeye devam eder.
Perl'ün bir dizenin Unicode olarak ele alınması gerektiğini bilme yolları şunlardır:
· "utf8 kullan" kapsamında
Programın tamamı Unicode ise (8 bitlik kod kullanılarak gösterilir) UNicod Tdönüşüm
Format), o zaman içindeki tüm dizelerin Unicode olması gerekir.
· "'unicode_strings' özelliğini kullan" kapsamında
Bu pragma, Perl'e işlemlerin yürütüldüğünü açıkça söyleyebilmeniz için oluşturuldu
kapsamı dahilinde Unicode kurallarını kullanmaktır. Yeni sürümlerden daha fazla operasyon etkileniyor
perls. Bkz. "Unicode Hatası".
· "5.012 kullanın" veya üzeri kapsamında
Bu, dolaylı olarak "'unicode_strings' özelliğini kullan" özelliğini açar.
· "Yerel ayarı kullan 'not_characters'" veya "yerel ayarı kullan" kapsamında ve geçerli
yerel ayar bir UTF-8 yerel ayarıdır.
İlki, Unicode işlemeyi ima edecek şekilde tanımlanmıştır; ve ikincisi bir Unicode'u gösterir
yerel ayar, dolayısıyla içindeki tüm dizelerin Unicode yorumu.
· Dize yalnızca Unicode kod noktası içerdiğinde
Perl, Unicode olmayan 255'in üzerindeki kod noktalarını hiçbir zaman kabul etmedi;
dizenin tamamı için Unicode anlamına gelir.
· Dize "\N{...}" adlı bir Unicode kod noktası içerdiğinde
"\N{...}" yapısı, bir Unicode kod noktasına atıfta bulunsa bile açıkça bir Unicode kod noktasına atıfta bulunur
bu aynı zamanda ASCII'de de var. Bu nedenle onu içeren dizenin Unicode olması gerekir.
· Dize Unicode olarak işaretlenmiş harici bir kaynaktan geldiğinde
"-C" komut satırı seçeneği, programa belirli girişlerin yapılacağını belirtebilir.
Unicode ve bunun değerleri Perl kodunuz tarafından okunabilir, bkz. "${^UNICODE}"
Perlvar.
· Dize UTF-8'e yükseltildiğinde
"utf8::utf8_upgrade()" işlevi açıkça kalıcı olarak kullanılabilir (bir
sonraki "utf8::utf8_downgrade()" çağrılır) bir dizenin şu şekilde değerlendirilmesine neden olur:
Unicode.
· Düzenli ifade kalıpları için ek yöntemler vardır
"/u" veya "/a" değiştiricileriyle derlenen bir kalıp, Unicode olarak değerlendirilir
("/a" ile ilgili bazı kısıtlamalar olmasına rağmen). "/d" ve "/l" değiştiricileri altında,
Unicode için başka göstergeler de vardır; bkz. "Karakter seti değiştiricileri"
Perlre.
Yukarıdakilerin hepsinin "bayt kullanımı" kapsamında geçersiz kılındığını unutmayın; ama yapmalısın
bu pragmayı yalnızca hata ayıklama için kullanıyor olacaksınız.
Ayrıca platformun işletim sistemiyle olan bazı etkileşimlerin hiçbir zaman Unicode kullanmadığını unutmayın.
kuralları.
Unicode kuralları geçerli olduğunda:
· Vaka çeviri operatörleri Unicode vaka çeviri tablolarını kullanır.
Enterpolasyonlu dizelerdeki "uc()" veya "\U" harfinin büyük harfe çevrildiğini, ancak
Enterpolasyonlu dizelerde "ucfirst" veya "\u", aşağıdaki dillerde başlık harfine çevirir:
ayrımı yapın (bu, büyük harfe eşdeğerdir)
ayrım).
Kendi kasanızı tanımlamanıza olanak tanıyan "Unicode::Casing" adlı bir CPAN modülü vardır.
"lc()", "lcfirst()", "uc()", "ucfirst()" ve "fc"de kullanılacak eşlemeler (veya bunların
"\U") gibi çift tırnaklı dize satır içi sürümleri. (Perl 5.16'dan önce bu
işlevsellik kısmen Perl çekirdeğinde sağlanıyordu, ancak bir takım eksikliklerden muzdaripti.
aşılmaz dezavantajlar olduğundan, bunun yerine CPAN modülü yazıldı.)
· Düzenli ifadelerdeki karakter sınıfları, karakter özelliklerine göre eşleşir
Unicode özellikler veritabanında belirtilen.
Örneğin "\w" bir Japon ideogramını eşleştirmek için kullanılabilir; ve "[[:digit:]]" a
Bengalce numarası.
· Adlandırılmış Unicode özellikleri, komut dosyaları ve blok aralıkları kullanılabilir (parantez içine alınmış gibi)
karakter sınıfları) "\p{}" "eşleşme özelliği" yapısını ve "\P{}" kullanarak
olumsuzluk, "özellikle eşleşmiyor".
Daha fazla ayrıntı için "Unicode Karakter Özellikleri" konusuna bakın.
Kendi karakter özelliklerinizi tanımlayabilir ve bunları normal ifadede kullanabilirsiniz.
"\p{}" veya "\P{}" yapısıyla. Daha fazla bilgi için bkz. "Kullanıcı Tanımlı Karakter Özellikleri"
detaylar.
genişletilmiş grafik Kümeleri (Mantıklı karakter)
Bir karakter düşünün, "H" deyin. Etrafında çeşitli işaretlerle görünebilir, örneğin
akut vurgu veya inceltme işareti veya çeşitli kancalar, daireler, oklar, vb., yukarıda, aşağıda,
bir tarafta veya diğerinde, vb. Dünya dilleri arasında pek çok olasılık bulunmaktadır.
Kombinasyonların sayısı astronomiktir ve her biri için bir karakter olsaydı
kombinasyonu, yakında Unicode'un bir milyondan fazla olası karakterini tüketecektir. Bu yüzden
Unicode farklı bir yaklaşım benimsedi: "H" tabanı için bir karakter ve bir karakter var
olası puanların her biri için ve bunlar nihai bir mantıksal sonuç elde etmek için çeşitli şekillerde birleştirilebilir.
karakter. Yani tek bir karakter gibi görünen mantıksal bir karakter,
birden fazla bireysel karakter dizisi. Unicode standardı bunları çağırır
"genişletilmiş grafik kümeleri" (artık pek kullanılmayan grafiğin geliştirilmiş bir versiyonudur)
"grafik kümesi"); Perl, aşağıdakilerle eşleşecek şekilde "\X" düzenli ifade yapısını sağlar
diziler bütünüyle.
Ancak Unicode'un amacı mevcut karakter seti standartlarını ve uygulamalarını birleştirmek ve
önceden var olan birkaç standartta, bazı standartlarla aynı anlama gelen tek karakterler bulunur.
bu kombinasyonlar, ISO-8859-1 gibi, bunlardan epeyce var. Örneğin, "LATİN
Unicode ortaya çıktığında BÜYÜK HARF E AKUT" zaten bu standarttaydı.
Unicode bu nedenle onu tek karakter olarak repertuarına ekledi. Fakat bu karakter
Unicode tarafından karakterden oluşan diziye eşdeğer kabul edilir
"LATİN BÜYÜK HARF E" ve ardından "AKUT Aksanı BİRLEŞTİREN" karakteri.
"VAZELİ LATİN BÜYÜK HARF E", "önceden oluşturulmuş" bir karakter olarak adlandırılır ve
"E" ve "BİRLEŞTİRME VURGU" dizisi ile eşdeğerliğe kanonik denir
denklik. Önceden oluşturulmuş tüm karakterlerin bir ayrışmaya sahip olduğu söylenir (
eşdeğer dizi) ve ayrıştırma türüne kanonik de denir. Bir dize olabilir
Mümkün olduğu kadar önceden oluşturulmuş karakterlerden oluşmalıdır veya şunlardan oluşabilir:
tamamen ayrıştırılmış karakterler. Unicode bunları sırasıyla "Normalleştirme Formu" olarak adlandırır
Oluşturuldu" (NFC) ve "Normalleştirme Formu Ayrıştırıldı". "Unicode::Normalize" modülü
ikisi arasında dönüşüm sağlayan işlevler içerir. Bir dize aynı zamanda her ikisinden de oluşmuş olabilir
karakterler ve ayrıştırılmış karakterler; bu modül hepsini bir veya tek yapmak için kullanılabilir
diğer.
Size bu eşdeğer formlardan herhangi birinde dizeler sunulabilir. Şu anda var
Perl 5'te farklılıkları göz ardı eden hiçbir şey yok. Bu yüzden bunu özel olarak halletmeniz gerekecek.
Genel tavsiye, daha fazla işlem yapmadan önce girdilerinizi "NFD"ye dönüştürmektir.
Daha ayrıntılı bilgi için bkz.http://unicode.org/reports/tr15/>.
Unicode Karakter Emlaklar
(Perl'in bireysel kod noktaları dizisini tek bir kod noktası olarak kabul ettiği tek zaman
mantıksal karakter yukarıda bahsedilen "\X" yapısındadır. Öyleyse
Bu tartışmadaki "karakter", tek bir Unicode kod noktası anlamına gelir.)
Hemen hemen tüm Unicode karakter özelliklerine düzenli ifadeler aracılığıyla erişilebilir.
için "\p{}" "eşleşen özellik" yapısını ve "\P{}" "eşleşmiyor özelliği"ni kullanarak
onun olumsuzlaması.
Örneğin, "\p{Büyük Harf}" herhangi bir tek karakteri Unicode "Büyük Harf" ile eşleştirir
özelliği, "\p{L}" ise "General_Category" değeri "L" (harf) olan herhangi bir karakterle eşleşir
özellik (aşağıdaki "General_Category" bölümüne bakın). Tek harf için parantez gerekli değildir
özellik adları olduğundan "\p{L}", "\pL" ile eşdeğerdir.
Daha resmi olarak, "\p{Büyük Harf}", Unicode'u "Büyük Harf" olan herhangi bir tek karakterle eşleşir.
özellik değeri "Doğru"dur ve "\P{Büyük Harf}", "Büyük Harf" olan herhangi bir karakterle eşleşir.
özellik değeri "Yanlış"tır ve "\p{Büyük harf=True}" olarak yazılmış olabilirler ve
Sırasıyla "\p{Büyük harf=Yanlış}".
Bu formalite, özellikler ikili olmadığında gereklidir; yani eğer daha fazlasını üstlenebilirlerse
Yalnızca "Doğru" ve "Yanlış" dışındaki değerler. Örneğin, "Bidi_Class" özelliği (bkz.
Aşağıdaki "Çift Yönlü Karakter Türleri"), aşağıdaki gibi birkaç farklı değer alabilir:
"Sol", "Sağ", "Boşluk" ve diğerleri. Bunları eşleştirmek için her ikisinin de belirtilmesi gerekir.
özellik adı ("Bidi_Class") VE eşleştirilen değer ("Sol", "Sağ", vb.).
Bu, yukarıdaki örneklerde olduğu gibi, iki bileşenin eşit aralıklarla ayrılmasıyla yapılır.
"\p{Bidi_Class: Sol}" gibi bir işaret (veya birbirinin yerine iki nokta üst üste) kullanın.
Unicode tanımlı tüm karakter özellikleri, aşağıdaki bileşik formlarda yazılabilir:
"\P{özellik=değer}" veya "\p{mülk değeri}", ancak Perl bazı ek özellikler sağlar
yalnızca tek biçimde yazılanların yanı sıra tüm ikili dosyalar için tek biçimli kısayollar
mülk adını ve mülk adını atlayabileceğiniz aşağıda açıklanan bazı diğer mülkler ve
eşittir veya iki nokta üst üste ayırıcı.
Çoğu Unicode karakter özelliğinde en az iki eşanlamlı (veya isterseniz takma ad) bulunur: a
yazılması daha kolay olan kısa ve daha açıklayıcı olan daha uzun olan, dolayısıyla
anlaşılması daha kolay. Dolayısıyla yukarıdaki "L" ve "Harf" özellikleri eşdeğerdir ve
birbirinin yerine kullanılabilir. Benzer şekilde, "Büyük", "Büyük Harf"in eşanlamlısıdır ve şunu yapabiliriz:
"\p{Büyük harf}", "\p{Büyük}" ile eşdeğer olarak yazılmıştır. Ayrıca, tipik olarak
özelliğin olabileceği değerlerin çeşitli eşanlamlıları. İkili özellikler için "Doğru"nun 3 değeri vardır
eşanlamlılar: "T", "Evet" ve "Y"; ve "Yanlış" sırasıyla "F", "Hayır" ve "N"yi içerir. Ama ol
dikkatli olmak. Bir mülk için değerin kısa biçimi, aynı şeyle aynı anlama gelmeyebilir.
bir başkası için kısa biçim. Dolayısıyla, "General_Category" özelliği için "L", "Harf" anlamına gelir,
ancak "Bidi_Class" özelliği için "L", "Sol" anlamına gelir. Özelliklerin tam listesi ve
eşanlamlılar perluniproplardadır.
Özellik adlarındaki ve değerlerindeki büyük/küçük harf farklılıkları önemsizdir; dolayısıyla "\p{Üst}"
"\p{upper}" veya hatta "\p{UpPeR}" ile aynı anlama gelir. Benzer şekilde ekleyebilirsiniz veya
Bir kelimenin ortasında herhangi bir yerde alt çizgileri çıkarın, böylece bunlar da eşdeğer olur
"\p{U_p_p_e_r}"'ye. Ve beyaz boşluk, kelime olmayan karakterlerin yanında önemsizdir, örneğin
parantezler ve eşittir veya iki nokta üst üste ayırıcılar olarak "\p{ Upper }" ve "\p{ Upper_case
: Y }" de bunlara eşdeğerdir. Aslında boşluklar ve hatta kısa çizgiler genellikle
herhangi bir yere eklenebilir veya silinebilir. Yani "\p{ Büyük/küçük harf = Evet}" bile eşdeğerdir. Hepsi bu
Unicode tarafından "gevşek eşleştirme" olarak adlandırılır. Daha sıkı eşleştirmenin kullanıldığı birkaç yer
sayıların ortasında ve ile başlayan veya biten Perl uzantısı özelliklerinde
vurgulamak. Daha sıkı eşleştirme, beyaz boşluklara önem verir (sözcük olmayanların bitişiğindekiler hariç)
karakterler), kısa çizgiler ve dahili olmayan alt çizgiler.
Ayrıca, hem "\p{}" hem de "\P{}" ifadelerinde olumsuzlamayı, arasına bir düzeltme işareti ("^") ekleyerek kullanabilirsiniz.
ilk ayraç ve özellik adı: "\p{^Tamil}", "\P{Tamil}" değerine eşittir.
Neredeyse tüm özellikler büyük/küçük harfe duyarlı olmayan eşleştirmeye karşı bağışıktır. Yani bir "/i" eklemek
düzenli ifade değiştirici eşleştikleri şeyi değiştirmez. İki set var
etkilendi. İlk küme "Uppercase_Letter", "Lowercase_Letter" ve
"Titlecase_Letter", bunların tümü "/i" eşleşmesi altındaki "Cased_Letter" ile eşleşiyor. Ve ikinci
set "Büyük harf", "Küçük harf" ve "Başlık"tır ve bunların tümü "/i" altındaki "Büyük Harf" ile eşleşir
eşleştirme. Bu set aynı zamanda her ikisi de "PosixUpper" ve "PosixLower" alt kümelerini de içerir.
"/i" altındaki "PosixAlpha" ile eşleşir. (Bu kümeler arasındaki fark, bazı şeylerin,
Romen rakamları gibi, hem büyük hem de küçük harflerle gelirler, dolayısıyla "Büyük Harfli" olurlar, ancak
harfler olarak kabul edilir, dolayısıyla bunlar "Cased_Letter" değildir.)
Unicode'u eşleştirirken dikkate alınması gereken özel noktalar için "Unicode kod noktalarının ötesinde" konusuna bakın
Unicode olmayan kod noktalarına karşı özellikler.
Genel_Kategori
Her Unicode karakterine "en olağan" olan genel bir kategori atanır.
bir karakterin sınıflandırılması" (danhttp://www.unicode.org/reports/tr44>).
Bunları yazmanın bileşik yolu "\p{General_Category=Number}" gibidir (kısa:
"\p{gc:n}"). Ancak Perl her şeyin eşit veya eşit olduğu kısayollar sağlar.
iki nokta üst üste ayırıcı atlanmıştır. Yani bunun yerine sadece "\pN" yazabilirsiniz.
"Genel Kategori" özelliğinin alabileceği değerlerin kısa ve uzun biçimleri şunlardır:
Uzun kısa
L harfi
LC, L& Cased_Letter (yani: [\p{Ll}\p{Lu}\p{Lt}])
Lu Büyük Harf_Harf
Ll Küçük Harf_Harf
Lt Titlecase_Letter
Lm Değiştirici_Harf
Lo Other_Letter
M İşareti
Mn Nonspace_Mark
Mc Spacing_Mark
Ben Encloseing_Mark
N Numarası
Nd Decimal_Number (aynı zamanda Rakam)
Nl Letter_Number
Başka_Numara Yok
P Noktalama İşaretleri (ayrıca Noktalama İşaretleri)
PC Konektörü_Noktalama
Pd Dash_Punctuation
Ps Open_Punctuation
Pe Close_Punctuation
Pi İlk_Noktalama
(kullanıma bağlı olarak Ps veya Pe gibi davranabilir)
Pf Final_Punctuation
(kullanıma bağlı olarak Ps veya Pe gibi davranabilir)
Po Diğer_Noktalama
S Sembolü
Sm Math_Symbol
Sc Currency_Symbol
Sk Değiştirici_Symbol
Yani Other_Symbol
Z Ayırıcı
Zs Space_Separator
Zl Line_Separator
Zp Paragraf_Ayırıcı
C Diğer
Cc Kontrolü (aynı zamanda Cntrl)
CF Formatı
Cs Vekil
Ortak Özel_Kullanım
Cn Atanmamış
Tek harfli özellikler, iki harfli alt özelliklerin herhangi birindeki tüm karakterlerle eşleşir
aynı harfle başlıyor. "LC" ve "L&" özeldir: her ikisi de setin takma adlarıdır
"Ll", "Lu" ve "Lt" ile eşleşen her şeyden oluşur.
Çift Yönlü Karakter Türleri
Çünkü yazılar yön bakımından farklılık gösterir (İbranice ve Arapça tam olarak yazılır).
örneğin solda) Unicode bir "Bidi_Class" özelliği sağlar. Bu değerlerden bazıları
sahip olabileceği mülkler şunlardır:
Değer Anlamı
L Soldan Sağa
LRE Soldan Sağa Yerleştirme
LRO Soldan Sağa Geçersiz Kılma
R Sağdan Sola
AL Arapça Harf
RLE Sağdan Sola Gömme
RLO Sağdan Sola Geçersiz Kılma
PDF Pop Yönlü Formatı
TR Avrupa Numarası
ES Avrupa Ayırıcı
ET Avrupa Terminatörü
BİR Arapça Sayı
CS Ortak Ayırıcı
NSM Aralıksız İşareti
BN Sınırı Nötr
B Paragraf Ayırıcı
S Segment Ayırıcı
WS Boşluk
AÇIK Diğer Nötrler
Bu özellik her zaman bileşik formda yazılır. Örneğin, "\p{Bidi_Class:R}"
normalde sağdan sola yazılan karakterlerle eşleşir. "General_Category"den farklı olarak
özelliği, bu özelliğe gelecekteki bir Unicode sürümünde eklenen daha fazla değere sahip olabilir. Onlar
Yukarıda listelenenler birçok Unicode sürümü için tam seti içeriyordu, ancak diğerleri eklendi
Unicode 6.3'te; perluniproplarda her zaman mevcut olanların neler olduğunu bulabilirsiniz. Ve
<http://www.unicode.org/reports/tr9/> bunların nasıl kullanılacağını açıklar.
Scripts
Dünya dilleri birçok farklı alfabeyle yazılmıştır. Bu cümle (eğer siz değilseniz)
çeviride okumak) Latince, Rusça ise Kiril dilinde yazılmıştır ve
Yunanca, Yunanca yazılır; Japonca çoğunlukla Hiragana veya Katakana'dadır. Çok var
Daha fazla.
Unicode "Script" ve "Script_Extensions" özellikleri, belirli bir karakterin hangi komut dosyası olduğunu verir
Her iki özellik de "\p{Script=Hebrew}" gibi bileşik formla belirtilebilir.
(kısa: "\p{sc=hebr}") veya "\p{Script_Extensions=Javanese}" (kısa: "\p{scx=java}"). İçinde
Buna ek olarak Perl, tüm "Komut Dosyası" özellik adları için kısayollar sağlar. Atlayabilirsiniz
eşittir (veya iki nokta üst üste) boyunca her şeyi yapın ve basitçe "\p{Latin}" yazın veya
"\P{Kiril}". (Bu, olması gereken "Script_Extensions" için geçerli değildir.
bileşik formda yazılmıştır.)
Bu iki özellik arasındaki fark, birden çok durumda kullanılan karakterleri içerir.
Kodlar. Örneğin '0'dan '9'a kadar olan rakamlar dünyanın birçok yerinde kullanılmaktadır.
Bunlar "Ortak" adlı bir komut dosyasına yerleştirilir. Diğer karakterler sadece birkaçında kullanılıyor
Kodlar. Örneğin "KATAKANA-HIRAGANA ÇİFT TİRE" hem Japonca'da hem de Japonca'da kullanılmaktadır.
senaryolar, Katakana ve Hiragana, ama başka hiçbir yerde. "Script" özelliği tümünü yerleştirir
"Ortak" komut dosyasında birden çok komut dosyasında kullanılan karakterler
"Script_Extensions" özelliği, yalnızca birkaç komut dosyasında kullanılanları her bir komut dosyasına yerleştirir.
bu senaryolar; birçok komut dosyasında kullanılanlar için hala "Ortak" seçeneğini kullanırken. Böylece her ikisi de
oyun:
"0" =~ /\p{sc=Ortak}/ # Eşleşmeler
"0" =~ /\p{scx=Ortak}/ # Eşleşmeler
ve bu eşleşmelerden yalnızca ilki:
"\N{KATAKANA-HIRAGANA ÇİFT TİRE}" =~ /\p{sc=Ortak} # Eşleşme
"\N{KATAKANA-HIRAGANA ÇİFT TİRE}" =~ /\p{scx=Ortak} # Eşleşme yok
Ve bunlardan yalnızca son ikisi eşleşiyor:
"\N{KATAKANA-HIRAGANA ÇİFT TİRE}" =~ /\p{sc=Hiragana} # Eşleşme yok
"\N{KATAKANA-HIRAGANA ÇİFT TİRE}" =~ /\p{sc=Katakana} # Eşleşme yok
"\N{KATAKANA-HIRAGANA ÇİFT TİRE}" =~ /\p{scx=Hiragana} # Eşleşme
"\N{KATAKANA-HIRAGANA ÇİFT TİRE}" =~ /\p{scx=Katakana} # Eşleşme
Dolayısıyla "Script_Extensions", içinde daha az karakterin bulunduğu geliştirilmiş bir "Komut Dosyasıdır"
"Ortak" komut dosyası ve buna bağlı olarak diğer komut dosyalarında daha fazlası. Unicode'da yeni
sürüm 6.0 ve verilerinin daha sonraki sürümlerde önemli ölçüde değişmesi muhtemeldir.
halledin. Yeni kod muhtemelen düz değil "Script_Extensions" kullanıyor olmalı
"Senaryo".
(Aslında "Ortak"ın yanı sıra "Devralınan" komut dosyası da kullanılan karakterleri içerir.
birden fazla komut dosyası. Bunlar, komut dosyasının değerini devralan değiştirici karakterlerdir.
karakteri kontrol ediyor. Bunlardan bazıları birçok komut dosyasında kullanılıyor ve bu nedenle "Devralınan" bölümüne giriliyor
hem "Script" hem de "Script_Extensions"ta. Diğerleri yalnızca birkaç komut dosyasında kullanılır, aynı şekilde
"Komut Dosyası"nda "Devralınan" seçeneğinde, ancak "Script_Extensions" bölümünde yer almaz.)
Unicode'da birkaç farklı rakam kümesinin bulunduğunu vurgulamakta fayda var.
0-9'a eşdeğerdir ve normal ifadede "\d" ile eşleştirilebilir. Eğer kullanıldıkları takdirde
yalnızca tek bir dil, o dilin "Script" ve "Script_Extension" içindedirler. Eğer
birden fazla komut dosyasında kullanılıyorlarsa "sc=Common" konumunda olacaklardır, ancak yalnızca
birçok komut dosyasında kullanılır ve bunların "scx=Common" konumunda olması gerekir.
Komut dosyalarının ve kısayollarının tam listesi perluniprops'tadır.
kullanım of the "Dır-dir" Önek
Geriye dönük uyumluluk için (Perl 5.6 ile), tüm özellikler Perl kullanılmadan yazılabilir.
Şu ana kadar bahsedilen bileşik form, adlarının başına "Is" veya "Is_" eklenmiş olabilir, dolayısıyla
Örneğin "\P{Is_Lu}", "\P{Lu}"'ya eşittir ve "\p{IsScript:Arabic}" şuna eşittir:
"\p{Arapça}".
Blokları
Ek olarak scriptlerUnicode ayrıca şunları da tanımlar: bloklar karakterlerden oluşan. Arasındaki fark
Komut dosyaları ve bloklar, komut dosyası kavramının doğal dillere daha yakın olmasıdır.
blok kavramı daha çok Unicode gruplarına dayalı yapay bir gruplandırmadır
ardışık sıra değerlerine sahip karakterler. Örneğin, "Temel Latince" bloğunun tamamı
sıra sayıları 0 ile 127 (dahil) arasında olan karakterler; başka bir deyişle ASCII
karakterler. "Latin" alfabesi, bundan bazı harflerin yanı sıra diğer birkaç harfi de içerir.
"Latin-1 Ek", "Latin Genişletilmiş-A" gibi bloklar, vb.ama hepsini içermiyor
bu bloklardaki karakterler. Örneğin 0-9 rakamlarını içermez,
çünkü bu rakamlar birçok komut dosyasında paylaşılıyor ve dolayısıyla "Ortak" komut dosyasında yer alıyor.
Komut dosyaları ve bloklar hakkında daha fazla bilgi için bkz. UAX#24 "Unicode Komut Dosyası Özelliği":
<http://www.unicode.org/reports/tr24>
"Script" veya "Script_Extensions" özellikleri muhtemelen kullanmak istediğiniz özellikler olacaktır
doğal dili işlerken; "Engelle" özelliği bazen yararlı olabilir
Unicode'un somunları ve cıvatalarıyla çalışmak.
Blok adları "\p{Blok: Oklar}" gibi bileşik biçimde eşleştirilir veya
"\p{Blk=İbranice}". Diğer çoğu özelliğin aksine, yalnızca birkaç blok adı Unicode'a sahiptir.
tanımlanmış kısa ad. Ancak Perl (hafif, artık önerilmeyen) bir kısayol sağlıyor:
Örneğin "\p{In_Arrows}" veya "\p{In_Hebrew}" diyebilirsiniz.
Geriye dönük uyumluluk için, adlandırma çakışması yoksa "Giriş" öneki çıkarılabilir
bir komut dosyasıyla veya başka herhangi bir özellikle kullanabilirsiniz ve bunların yerine "Is" önekini bile kullanabilirsiniz.
vakalar. Ancak bunu yeni kod için yapmayın çünkü kodunuz yeni sürümlerde bozulabilir ve
bu zaten oldu: Çok erken Unicode sürümlerinde bir zaman vardı ki
"\p{İbranice}" şununla eşleşirdi: blok İbranice; şimdi öyle değil.
"Giriş" önekini kullanmak şu ana kadar bu belirsizliği ortadan kaldırıyor. Ancak Unicode'un yeni sürümleri devam ediyor
adları "In" ile başlayan yeni özellikler eklemek için. Birinden birinin olma ihtimali var
bir gün kullanımınızla çelişecekler. Bu sadece bir Perl uzantısı olduğundan,
Unicode'un adı öncelikli olacak ve kodunuz bozulacaktır. Ayrıca Unicode
adı "In" ile başlayan bir komut dosyası eklemek ücretsizdir; bu sorunlara neden olur.
Bu nedenle blokları belirlerken bileşik formu kullanmak daha net ve en iyisidir. Ve emin ol
gerçekten yapmak istediğin şey bu. Çoğu durumda komut dosyaları istediğiniz şeydir
yerine.
Blokların ve kısayollarının tam listesi perluniprops'tadır.
Diğer Emlaklar
Burada açıklanan en temel özelliklerden çok daha fazla özellik vardır. Tam bir liste
perluniprops'tadır.
Unicode, tüm özelliklerini bileşik formda tanımlar; dolayısıyla tüm tek formlu özellikler,
Perl uzantıları. Bunların çoğu Unicode olanlarla eşanlamlıdır, ancak bazıları
bileşik formdaki birkaçı da dahil olmak üzere orijinal uzantılar. Ve oldukça az sayıda
bunlar aslında Unicode tarafından tavsiye edilmektedir (içindehttp://www.unicode.org/reports/tr18>).
Bu bölümde yalnızca bileşik ile eşanlamlı olmayan tüm uzantılar hakkında bazı ayrıntılar verilmektedir.
Unicode özellikleri oluşturun (bu özellikler için Unicode'a başvurmanız gerekir)
Standarthttp://www.unicode.org/reports/tr44>.
"\p{Tümü}"
Bu, mümkün olan her kod noktasıyla eşleşir. "qr/./s" ile eşdeğerdir. Hepsinden farklı olarak
kullanıcı tanımlı olmayan diğer "\p{}" özelliği eşleşirse, bu durumda hiçbir uyarı oluşturulmaz.
is özelliği, Unicode olmayan bir kod noktasıyla eşleştirilir (bkz. "Unicode kodunun ötesinde
puanlar" aşağıda).
"\p{Sayı}"
Bu, herhangi bir "\p{Alphabetic}" veya "\p{Decimal_Number}" karakteriyle eşleşir.
"\p{Herhangi biri}"
Bu, 1_114_112 Unicode kod noktalarından herhangi biriyle eşleşir. Bunun eşanlamlısı
"\p{Unicode}".
"\p{ASCII}"
Bu, US-ASCII karakter setindeki 128 karakterden herhangi biriyle eşleşir.
Unicode'un alt kümesi.
"\p{Atandı}"
Bu, atanmış herhangi bir kod noktasıyla eşleşir; yani genel kategorisi
"Atanmamış" değildir (veya eşdeğer olarak "Cn" değildir).
"\p{Boş}"
Bu, "\h" ve "\p{HorizSpace}" ile aynıdır: Aralığı değiştiren bir karakter
yatay olarak.
"\p{Ayrıştırma_Türü: Kanonik olmayan}" (Kısa: "\p{Dt=NonCanon}")
Kanonik olmayan bir ayrışmaya sahip bir karakterle eşleşir.
Yukarıda bahsettiğimiz "Genişletilmiş Grafik Kümeleri (Mantıksal karakterler)" bölümünde
kanonik ayrıştırmalar. Bununla birlikte, daha birçok karakterin farklı türde özellikleri vardır.
ayrıştırma, "uyumlu" veya "kanonik olmayan" bir ayrıştırma. Olan diziler
Bu ayrıştırmaların kanonik olarak öncekine eşdeğer olduğu düşünülmez.
oluşan karakter. Bunun bir örneği "SUPERSCRIPT ONE"dır. Biraz benziyor
normal rakam 1, ancak tam olarak değil; 1 rakamına ayrıştırılmasına denir
"uyumlu" ayrıştırma, özellikle "süper" ayrıştırma. Bir kaç tane var
bu tür uyumluluk ayrıştırmaları (bkz.http://www.unicode.org/reports/tr44>),
"uyumluluk" adı verilen bir tanesi de dahil, bu da çeşitli türde ayrıştırma anlamına gelir
bu, Unicode'un seçtiği diğer ayrıştırma kategorilerine uymuyor.
Çoğu Unicode karakterinin bir ayrıştırması olmadığını, dolayısıyla bunların ayrıştırılmasının olmadığını unutmayın.
türü "Hiçbiri"dir.
Size kolaylık sağlamak için Perl, şu anlama gelmek üzere "Canonical Olmayan" ayrıştırma türünü ekledi:
çeşitli uyumluluk ayrıştırmalarından herhangi biri.
"\p{Grafik}"
Grafik olan herhangi bir karakterle eşleşir. Teorik olarak bu, bir karakter anlamına gelir.
yazıcı mürekkebin kullanılmasına neden olur.
"\p{HorizSpace}"
Bu, "\h" ve "\p{Boş}" ile aynıdır: aralığı değiştiren bir karakter
yatay olarak.
"\p{In=*}"
Bu, "\p{Present_In=*}" ile eşanlamlıdır
"\p{PerlSpace}"
Bu, "\s" ile aynıdır, ASCII ile sınırlıdır, yani "[ \f\n\r\t]" ve ile başlar
Perl v5.18, dikey bir sekme.
Anımsatıcı: Perl'ün (orijinal) alanı
"\p{PerlWord}"
Bu, ASCII ile sınırlı olan "\w" ile aynıdır, yani "[A-Za-z0-9_]"
Anımsatıcı: Perl'in (orijinal) kelimesi.
"\p{Posix...}"
Bunlardan "\p{}" gösterimi kullanılarak eşdeğer olan birkaç tane vardır.
Posix sınıfları ve perlrecharclass'taki "POSIX Karakter Sınıfları" bölümünde açıklanmıştır.
"\p{Mevcut_In: *}" (Kısa: "\p{In=*}")
Bu özellik, bir karakterin hangi Unicode sürüm(ler)inde olduğunu bilmeniz gerektiğinde kullanılır.
Yukarıdaki "*", 1.1 veya 4.0 gibi iki haneli Unicode sürüm numarasını temsil eder; veya
"*" aynı zamanda "Atanmamış" da olabilir. Bu özellik, aşağıdaki kod noktalarıyla eşleşecektir:
Nihai düzenleme, sürüm tarafından verilen Unicode sürümü itibarıyla belirlendi
sayı; "\p{Present_In: Unsigned}", anlamı şu olan kod noktalarıyla eşleşecektir:
henüz atanmadı.
Örneğin, ilk Unicode'da "U+0041" "LATİN BÜYÜK HARF A" mevcuttu
1.1 sürümü mevcut olduğundan bu özellik tüm geçerli "*" sürümleri için geçerlidir.
Öte yandan, "U+1EFF", "LATİN" haline gelen 5.1 sürümüne kadar atanmamıştı.
DÖNGÜLÜ KÜÇÜK Y HARFİ", dolayısıyla onunla eşleşen tek "*" 5.1, 5.2 ve
sonra.
Unicode, bunun türetildiği "Yaş" özelliğini sağlar. Yaşla ilgili sorun
bunun katı bir yorumunun (Perl'in aldığı gibi) kesin olarak eşleştiği anlamına mı geliyor?
serbest bırakma kod noktasının anlamı tanıtılmıştır. Böylece "U+0041" yalnızca 1.1 ile eşleşecektir;
ve yalnızca "U+1EFF" 5.1. Bu genellikle istediğin şey değildir.
Age özelliğinin Perl dışı bazı uygulamaları, anlamını şu şekilde değiştirebilir:
Perl'ün "Present_In" özelliğiyle aynı; sadece bunun farkında ol.
Bu özelliklerin her ikisiyle ilgili bir başka karışıklık da tanımın şu şekilde olmamasıdır:
kod noktası atanmış, ancak kod noktasının anlamı şuydu:
kararlı. Bunun nedeni 66 kod noktasının her zaman atanmamış olmasıdır ve dolayısıyla
Onlar için "Yaş", onları öyle yapma kararının verildiği Unicode sürümüdür.
Örneğin, "U+FDD0" karakterinin ataması kalıcı olarak kaldırılacak ve karar
bunu yapmak sürüm 3.1'de yapıldı, dolayısıyla "\p{Age=3.1}" bu karakterle eşleşiyor, ayrıca
"\p{Present_In: 3.1}" ve üzerini yapar.
"\p{Yazdır}"
Bu, kontroller dışında grafiksel veya boş olan herhangi bir karakterle eşleşir.
"\p{SpacePerl}"
Bu, ASCII'nin ötesi de dahil olmak üzere "\s" ile aynıdır.
Anımsatıcı: Uzay, Perl tarafından değiştirildiği şekliyle. (Dikey sekmeyi şu ana kadar içermez:
v5.18; hem Posix standardı hem de Unicode beyaz alanı dikkate alır.)
"\p{Başlık}" ve "\p{Başlık}"
Büyük/küçük harfe duyarlı eşleştirmede bunların her ikisi de "\p{Genel" ile aynı kod noktalarıyla eşleşir
Kategori=Titlecase_Letter}" ("\p{gc=lt}"). Aradaki fark, "/i" altında büyük/küçük harf olmamasıdır
eşleşirse bunlar "\p{Cased}" ile aynı şekilde eşleşirken "\p{gc=lt}" eşleşir
"\p{Cased_Letter").
"\p{Unicode}"
Bu, 1_114_112 Unicode kod noktalarından herhangi biriyle eşleşir. "\p{Herhangi biri}".
"\p{VertSpace}"
Bu "\v" ile aynıdır: Aralığı dikey olarak değiştiren bir karakter.
"\p{Kelime}"
Bu, ASCII'nin ötesinde 100_000'den fazla karakter dahil olmak üzere "\w" ile aynıdır.
"\p{XPosix...}"
Bunlardan birkaçı tam kapsamlı olarak genişletilmiş standart Posix sınıflarıdır.
Unicode aralığı. Perlrecharclass'taki "POSIX Karakter Sınıfları" bölümünde açıklanmıştır.
Kullanıcı tanımlı Karakter Emlaklar
Adları aşağıdaki gibi olan alt yordamları tanımlayarak kendi ikili karakter özelliklerinizi tanımlayabilirsiniz:
"İçinde" veya "Oldu" ile başlayın. (Perlre'deki deneysel özellik "(?[ ])" bir
daha karmaşık tanımlara izin veren bir alternatiftir.) Alt rutinler herhangi bir şekilde tanımlanabilir.
paket. Kullanıcı tanımlı özellikler "\p{}" normal ifadesinde kullanılabilir ve
"\P{}" yapıları; dışında bir paketten kullanıcı tanımlı bir özellik kullanıyorsanız
İçinde bulunduğunuz paketi "\p{}" veya "\P{}" yapısında belirtmeniz gerekir.
# Is_Foreign özelliğinin Lang'ta tanımlandığını varsayarak::
ana paket; # özellik paketi adı gerekli
if ($txt =~ /\p{Lang::IsForeign}+/) { ... }
paket Lang; # özellik paketi adı gerekli değil
if ($txt =~ /\p{Yabancıdır}+/) { ... }
Efektin derleme zamanı olduğunu ve tanımlandıktan sonra değişmez olduğunu unutmayın. Ancak altprogramlar
büyük/küçük harfe duyarlı eşleştirme etkinse ve değilse 0 olan tek bir parametre iletilir.
büyük/küçük harfsiz eşleştirme etkinse sıfır. Altprogram farklı değerler döndürebilir
bayrağın değerine bağlı olarak ve bir değer kümesi değişmez bir şekilde geçerli olacaktır.
tüm büyük/küçük harfe duyarlı eşleşmeler ve diğer küme ise tüm büyük/küçük harfe duyarlı olmayan eşleşmeler içindir.
Düzenli ifade bozuksa Perl'ün onu çağırmak yerine öleceğini unutmayın.
Alt programın adı kusurlu veriler tarafından belirlendiğinde alt program.
Alt rutinler, bir veya daha fazla yeni satır içeren, özel olarak biçimlendirilmiş bir dize döndürmelidir.
ayrılmış çizgiler. Her satır aşağıdakilerden biri olmalıdır:
· Eklenecek kod noktasını belirten tek bir onaltılık sayı.
· Yatay boşlukla ayrılmış iki onaltılık sayı (boşluk veya tablo şeklinde)
karakterler) dahil edilecek kod noktalarının aralığını belirtir.
· "+" önekiyle eklenecek bir şey: yerleşik bir karakter özelliği (ön eki
"utf8::") veya tam olarak nitelenmiş (paket adı dahil) kullanıcı tanımlı bir karakter
özellik, o özellikteki tüm karakterleri temsil etmek için; iki onaltılı kod
bir aralık için puanlar; veya tek bir onaltılık kod noktası.
· Hariç tutulacak bir şey, ön eki "-": mevcut bir karakter özelliği (ön eki
"utf8::") veya tam olarak nitelenmiş (paket adı dahil) kullanıcı tanımlı bir karakter
özellik, o özellikteki tüm karakterleri temsil etmek için; iki onaltılı kod
bir aralık için puanlar; veya tek bir onaltılık kod noktası.
· Olumsuzlanacak bir şey, "!" öneki: mevcut bir karakter özelliği (ön eki
"utf8::") veya tam olarak nitelenmiş (paket adı dahil) kullanıcı tanımlı bir karakter
özellik, o özellikteki tüm karakterleri temsil etmek için; iki onaltılı kod
bir aralık için puanlar; veya tek bir onaltılık kod noktası.
· "&" öneki ile kesişecek bir şey: mevcut bir karakter özelliği (önek
"utf8::") veya tam olarak nitelenmiş (paket adı dahil) kullanıcı tanımlı bir karakterle
özellik, özellikteki karakterler dışındaki tüm karakterler için; iki
bir aralık için onaltılık kod noktaları; veya tek bir onaltılık kod noktası.
Örneğin, hem Japonca heceleri (hiragana hem de hiragana) kapsayan bir özelliği tanımlamak için
katakana), tanımlayabilirsiniz
alt InKana {
geri dön <
3040\t309F
30A0\t30FF
END
}
Here-doc bitiş işaretçisinin satırın başında olduğunu hayal edin. Artık kullanabilirsiniz
"\p{InKana}" ve "\P{InKana}".
Ayrıca mevcut blok özelliği adlarını da kullanabilirsiniz:
alt InKana {
<<'SON';
+utf8::Hiragana'da
+utf8::Katakana'da
END
}
Ham blok aralıklarını değil, yalnızca tahsis edilen karakterleri eşleştirmek istediğinizi varsayalım:
başka bir deyişle, atanmamış karakterleri kaldırmak istiyorsunuz:
alt InKana {
<<'SON';
+utf8::Hiragana'da
+utf8::Katakana'da
-utf8::IsCn
END
}
Olumsuzlama, (sürpriz!) olumsuzlanmış sınıfları tanımlamak için kullanışlıdır.
sub InNotKana {
<<'SON';
!utf8::Hiragana'da
-utf8::Katakana'da
+utf8::IsCn
END
}
Bu, Unicode olmayan tüm kod noktalarıyla eşleşecektir çünkü bunların her biri Kana'da değildir. Sen
Bu değiştirilmiş örnekte gösterildiği gibi, istenirse bunları hariç tutmak için kesişimi kullanabilirsiniz:
sub InNotKana {
<<'SON';
!utf8::Hiragana'da
-utf8::Katakana'da
+utf8::IsCn
&utf8::Herhangi biri
END
}
&utf8::Herhangi biri tanımın son satırı olmalıdır.
Kesişme genellikle ortak karakterlerin iki (veya daha fazla) ile eşleşmesini sağlamak için kullanılır.
sınıflar. İlk set için "&" kullanmamayı hatırlamak önemlidir; olurdu
hiçbir şeyle kesişmez ve boş bir kümeyle sonuçlanır.
Kullanıcı tanımlı olmayan "\p{}" özellik eşleşmelerinin aksine, bunlar gerçekleşirse hiçbir uyarı oluşturulmaz.
özellikler Unicode olmayan bir kod noktasıyla eşleştirilir (bkz. "Unicode kod noktalarının ötesinde"
altında).
Kullanıcı tanımlı dava Eşlemeler (için ciddi hackerlar sadece)
Bu özellik vardır olmuştur kaldırıldı as of Perl 5.16 CPAN modülü "Unicode::Casing" şunları sağlar:
bu özelliğin sahip olduğu dezavantajlar olmadan daha iyi işlevsellik. Perl kullanıyorsanız
5.16'dan önceki sürümlerde bu özellik en kapsamlı şekilde bu bölmenin 5.14 sürümünde belgelenmiştir:
<http://perldoc.perl.org/5.14.0/perlunicode.html#User-Defined-Case-Mappings-%28for-ciddi-hackers-only%29>
Karakter Kodlamalar için Giriş ve Çıktı
Bkz. Kodlama.
Unicode Düzenli ifade Destek Seviye
Normal ifadeler için Unicode tarafından desteklenen özelliklerin aşağıdaki listesi, bunların tümünü açıklamaktadır.
şu anda çekirdek Perl tarafından doğrudan desteklenen özellikler. "Seviye N"ye yapılan atıflar ve
bölüm numaraları Unicode Teknik Standardı #18, "Unicode Normal
İfadeler", sürüm 13, Ağustos 2008'den itibaren.
· Seviye 1 - Temel Unicode Desteği
RL1.1 Hex Gösterimi - tamamlandı [1]
RL1.2 Özellikleri - tamamlandı [2][3]
RL1.2a Uyumluluk Özellikleri - tamamlandı [4]
RL1.3 Çıkarma ve Kesişme - deneysel [5]
RL1.4 Basit Kelime Sınırları - tamamlandı [6]
RL1.5 Basit Gevşek Eşleştirmeler - tamamlandı [7]
RL1.6 Çizgi Sınırları - EKSİK [8] [9]
RL1.7 Ek Kod Noktaları - tamamlandı [10]
[1] "\N{U+...}" ve "\x{...}"
[2] "\p{...}" "\P{...}"
[3] yalnızca minimal listeyi değil aynı zamanda tüm Unicode karakter özelliklerini destekler (bkz. Unicode
Yukarıdaki Karakter Özellikleri)
[4] "\d" "\D" "\s" "\S" "\w" "\W" "\X" "[:destek :]" "[:^prop:]"
[5] v5.18 "(?[...])" ile başlayan deneysel özellik bunu başarmaktadır.
Perlre'de "(?[ ])" konusuna bakın. Deneysel bir özelliği kullanmak istemiyorsanız şunları yapabilirsiniz:
aşağıdakilerden birini kullanın:
· Düzenli ifade ileriye dönük
İleriye dönük kullanarak sınıf çıkarma işlemini taklit edebilirsiniz. Örneğin hangi UTS#18
olarak yazabilir
[{Blok=Yunanca}-[{ATANILANMADI}]]
Perl'de şu şekilde yazılabilir:
(?!\p{Atanmamış})\p{Blok=Yunanca}
(?=\p{Atandı})\p{Blok=Yunanca}
Ancak bu özel örnekte muhtemelen gerçekten istiyorsunuz
\p{Yunanca}
Yunan alfabesinin bir parçası olduğu bilinen atanmış karakterlerle eşleşecek.
· CPAN modülü "Unicode::Regex::Set"
UTS#18 gruplandırma, kesişme, birleştirme ve kaldırma işlemlerinin tamamını uygular
(çıkarma) sözdizimi.
· "Kullanıcı Tanımlı Karakter Özellikleri"
Birleşme için "+", çıkarma için "-" (set-fark), kesişme için "&"
[6] "\b" "\B"
[7] Perl'ün eşleştirmede Basit değil Tam harf katlama yaptığını unutmayın:
Örneğin "U+1F88", yalnızca "U+1F00" yerine "U+03F9 U+1B80"a eşdeğerdir.
Bu fark esas olarak belirli harflerle belirli Yunan büyük harfleri için önemlidir.
değiştiriciler: Tam harf katlama, harfi ayrıştırırken Basit harf katlama,
katlama onu tek bir karakterle eşleştirir.
[8] Perl "\n"yi başlangıç ve bitiş satırı sınırlayıcısı olarak ele alır. Unicode daha fazlasını belirtir
bu şekilde yorumlanması gereken karakterler.
Bunlar:
VT U+000B (C'de \v)
FF U+000C (\f)
CR U+000D (\r)
NEL U+0085
LS U+2028
PSU+2029
Normal ifade kalıplarındaki "^" ve "$" öğelerinin tüm bunlarla eşleşmesi gerekir, ancak
yapma. Bu karakterler ayrıca "<>" $. ve komut satırını etkilemez ancak etkilemelidir.
numaraları.
Ayrıca "CRLF" içerisinde satırlar bölünmemelidir (yani satırlar arasında boş satır olmamalıdır).
"\r" ve "\n"). "CRLF" için ":crlf" katmanını deneyin (bkz. PerlIO).
[9] Ancak "Unicode::LineBreak" mevcut.
Bu modül, UAX#14 "Unicode Satır Ayırma uyumluluğuyla hat kesme sağlar
Algoritma"http://www.unicode.org/reports/tr14>.
[10] Perl'de kullanılan UTF-8/UTF-EBDDIC yalnızca "U+10000"den "U+10FFFF"ye değil aynı zamanda
"U+10FFFF"nin ötesinde
· Seviye 2 - Genişletilmiş Unicode Desteği
RL2.1 Kanonik Eşdeğerleri - EKSİK [10] [11]
RL2.2 Varsayılan Grafik Kümeleri - EKSİK [12]
RL2.3 Varsayılan Kelime Sınırları - YAPILDI [14]
RL2.4 Varsayılan Gevşek Eşleşmeler - EKSİK [15]
RL2.5 Ad Özellikleri - YAPILDI
RL2.6 Joker Karakter Özellikleri - EKSİK
[10] bkz. UAX#15 "Unicode Normalleştirme Formları"
[11] Unicode::Normalize'a sahip ancak normal ifadelere entegre değil
[12] \X ve \b{gcb}'ye sahip ancak bir "Grapheme Kümemiz" yok
Modu"
[14] bkz. UAX#29, Kelime Sınırları
[15] Bu konu Bölüm 3.13'te ele alınmaktadır (Unicode 6.0'da)
· Seviye 3 - Özel Destek
RL3.1 Özel Noktalama İşaretleri - EKSİK
RL3.2 Özel Grafik Kümeleri - EKSİK [17] [18]
RL3.3 Özel Kelime Sınırları - EKSİK
RL3.4 Özel Gevşek Kibritler - KAYIP
RL3.5 Özel Seriler - KAYIP
RL3.6 Bağlam Eşleştirme - EKSİK [19]
RL3.7 Artımlı Eşleşmeler - KAYIP
( RL3.8 Unicode Küme Paylaşımı )
RL3.9 Olası Eşleştirme Setleri - EKSİK
RL3.10 Katlanmış Eşleştirme - EKSİK [20]
RL3.11 Alt Eşleştiriciler - EKSİK
[17] bkz. UAX#10 "Unicode Harmanlama Algoritmaları"
[18] Unicode::Collate'e sahip ancak normal ifadelere entegre değil
[19] (?<=x) ve (?=x)'e sahiptir, ancak ileriye veya geriye bakma vardır
hedef alt dizenin dışını görmelidir
[20] diğer dilsel özellikler için duyarsız eşleştirmeye ihtiyaç duyar
durumda; örneğin hiragana'dan katakana'ya, geniş ve
dar, basitleştirilmiş Han'dan geleneksel Han'a (bkz. UTR#30)
"Karakter Katlamaları")
Unicode Kodlamalar
Unicode karakterler şuralara atanır: kod noktalarıbunlar soyut sayılardır. Bunları kullanmak için
sayılar, çeşitli kodlamalara ihtiyaç vardır.
· UTF-8
UTF-8, değişken uzunlukta (1 ila 4 bayt), bayt sırasından bağımsız bir kodlamadır. Çoğunlukla
Bu belgenin başka yerleri de dahil olmak üzere Perl belgelerinde "UTF-8" terimi şu anlama gelir:
ayrıca "UTF-EBCDIC". Ancak bu bölümde "UTF-8" yalnızca kullanılan kodlamayı ifade eder.
ASCII platformları. Bu, 7 bitlik US-ASCII'nin bir üst kümesidir, dolayısıyla ASCII'de kodlanan her şey
UTF-8'de kodlandığında aynı gösterim.
Aşağıdaki tablo Unicode 3.2'den alınmıştır.
Kod Noktaları 1. Bayt 2. Bayt 3. Bayt 4. Bayt
U+0000..U+007F 00..7F
U+0080..U+07FF * C2..DF 80..BF
U+0800..U+0FFF E0 * A0..BF 80..BF
U+1000..U+CFFF E1..EC 80..BF 80..BF
U+D000..U+D7FF ED 80..9F 80..BF
U+D800..U+DFFF +++++ utf16 vekilleri, yasal değil utf8 +++++
U+E000..U+FFFF EE..EF 80..BF 80..BF
U+10000..U+3FFFF F0 * 90..BF 80..BF 80..BF
U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF
U+100000..U+10FFFF F4 80..8F 80..BF 80..BF
Yukarıdaki bayt girişlerinin birçoğundan önce "*" ile işaretlenmiş boşluklara dikkat edin. Bunlar
en kısa olmayan kodlamalardan kaçınan yasal UTF-8'in neden olduğu: teknik olarak mümkün
UTF-8-tek bir kod noktasını farklı şekillerde kodlar, ancak bu açıkça yasaktır,
ve her zaman mümkün olan en kısa kodlama kullanılmalıdır (ve Perl'ün yaptığı da budur).
Buna bakmanın başka bir yolu da bitlerdir:
Kod Noktaları 1. Bayt 2. Bayt 3. Bayt 4. Bayt
0aaaaaa 0aaaaaa
00000bbbbbaaaaaa 110bbbb 10aaaaaa
ccccbbbbbbaaaaaa 1110cccc 10bbbbbb 10aaaaaa
00000dddccccccbbbbbbaaaaaa 11110ddd 10cccccc 10bbbbbb 10aaaaaa
Gördüğünüz gibi devam baytlarının tümü "10" ile başlar ve baştaki bitler "XNUMX" ile başlar.
başlangıç baytı kodlanmış karakterde kaç bayt olduğunu söyler.
Orijinal UTF-8 spesifikasyonu, sayıların kodlanmasına izin vermek için 6 bayta kadar izin veriyordu
"0x7FFF_FFFF"ye kadar. Perl bunlara izin vermeye devam ediyor ve bunu 13'e kadar genişletti
Kod noktalarını kodlamak için bayt sayısı, 64 bitlik bir kelimeye sığabilecek kadardır. Ancak Perl
bunlardan herhangi birinin taşınabilir olmayan çıktısını alırsanız uyar; ve katı UTF-8 girişi altında
protokoller yasaktır.
· UTF-EBCDIC
UTF-8'e benzer, ancak UTF-8'in ASCII açısından güvenli olması gibi EBCDIC açısından güvenlidir. Bu şu anlama geliyor: hepsi
temel karakterler (ASCII eşdeğerlerine sahip olanların tümünü içerir ("A" gibi),
"0", "%", vb.) hem EBCDIC hem de UTF-EBCDIC'de aynıdır.)
UTF-EBCDIC, EBCDIC platformlarında kullanılır. En büyük Unicode kod noktaları 5 bayt alır
temsil etmek için (UTF-4'de 8 yerine) ve Perl bunu maksimum 7 bayta kadar genişletir
pode noktalarını 32 bitlik bir kelimeye sığabilecek noktaya kadar kodlayın (13 bayt ve
UTF-64'de 8 bit kelime).
· UTF-16, UTF-16BE, UTF-16LE, Suretler ve "BOM"'lar (Bayt Sırası İşaretleri)
Aşağıdaki öğeler çoğunlukla referans ve genel Unicode bilgisi içindir, Perl
bu yapıları dahili olarak kullanmaz.
UTF-8 gibi UTF-16 da değişken genişlikli bir kodlamadır ancak UTF-8'in 8 bitlik kod kullandığı durumlarda
UTF-16, 16 bitlik kod birimlerini kullanır. Tüm kod noktaları 2 veya 4 bayt yer kaplar
UTF-16: "U+0000..U+FFFF" kod noktaları tek bir 16 bitlik birimde saklanır ve kod
iki 10000 bitlik birimde "U+10..U+16FFFF" noktaları. İkinci durum kullanılıyor suretler,
ilk 16 bitlik birim yüksek vekilve ikincisi ise düşük
vekil.
Suretler, "U+10000..U+10FFFF" aralığını kodlamak için ayrılmış kod noktalarıdır.
16 bitlik birim çiftleri halinde Unicode kod noktaları. yüksek suretler aralık mı
"U+D800..U+DBFF" ve düşük suretler "U+DC00..U+DFFF" aralığıdır. vekil
kodlama
$hi = ($uni - 0x10000) / 0x400 + 0xD800;
$lo = ($uni - 0x10000) % 0x400 + 0xDC00;
ve kod çözme
$uni = 0x10000 + ($hi - 0xD800) * 0x400 + ($lo - 0xDC00);
16 bitlik olması nedeniyle UTF-16 bayt sırasına bağlıdır. UTF-16'nın kendisi kullanılabilir
bellek içi hesaplamalar için, ancak depolama veya aktarım gerekiyorsa UTF-16BE
(big-endian) veya UTF-16LE (little-endian) kodlamaları seçilmelidir.
Bu başka bir sorunu ortaya çıkarıyor: Peki ya verilerinizin UTF-16 olduğunu biliyorsanız, ancak
hangi endianlığın olduğunu bilmiyor musun? Bayt Sırası İşaretleri veya "BOM"lar bir çözümdür
Bu. Bayt sırası olarak işlev görmesi için Unicode'da özel bir karakter ayrılmıştır
işaretleyici: "U+FEFF" kod noktasına sahip karakter "BOM"dur.
İşin püf noktası şu ki, eğer bir "BOM" okursanız bayt sırasını bileceksiniz, çünkü eğer
big-endian platformunda yazıldığında "0xFE 0xFF" baytlarını okuyacaksınız, ancak eğer
Little-Endian platformunda yazıldığında "0xFF 0xFE" baytlarını okuyacaksınız. (Ve eğer
kaynak platform ASCII platformu UTF-8'de yazıyordu, baytları okuyacaksınız
"0xEF 0xBB 0xBF".)
Bu hilenin çalışma şekli, "U+FFFE" kod noktasına sahip karakterin
giriş akışlarında olması gerekiyordu, bu nedenle "0xFF 0xFE" bayt sırası açıkça
""BOM", little-endian formatında temsil edilir" ve "U+FFFE" olamaz, şu şekilde temsil edilir:
büyük-endian biçimi".
Suretlerin, diğerlerini temsil etmek için çiftler halinde kullanılmaları dışında Unicode'da hiçbir anlamı yoktur.
kod noktaları. Ancak Perl bunların dahili olarak ayrı ayrı temsil edilmesine izin verir, çünkü
örneğin " diyerekchr(0xD801)", böylece yalnızca geçerli olanlar değil, tüm kod noktaları
açık takas, temsil edilebilir. Unicode onlar için anlambilimi tanımlar, örneğin
onların "Genel_Kategorisi" "Cs"dir. Ancak bunların kullanımı biraz tehlikeli olduğundan Perl
uyaracaktır ("utf8"in bir alt kategorisi olan "vekil" uyarı kategorisini kullanarak)
birinin küçük harfini alma veya büyük/küçük harf eşleştirme gibi şeyler yapılmaya çalışılırsa-
duyarsızca veya bunların çıktısını almak için. (Fakat bunu 5.14'ten önce Perls üzerinde denemeyin.)
· UTF-32, UTF-32BE, UTF-32LE
UTF-32 ailesi, birimlerin farklı olması dışında UTF-16 ailesine oldukça benzer.
32 bit ve bu nedenle yedek şemaya gerek yok. UTF-32 sabit genişliktedir
kodlama. "BOM" imzaları BE için "0x00 0x00 0xFE 0xFF" ve "0xFF 0xFE 0x00" şeklindedir
LE için 0x00".
· UCS-2, UCS-4
ISO 10646 standardı tarafından tanımlanan eski, sabit genişlikli kodlamalar. UCS-2 16 bittir
kodlama. UTF-16'dan farklı olarak UCS-2, "U+FFFF"nin ötesine genişletilemez çünkü
vekiller kullanın. UCS-4, işlevsel olarak UTF-32 ile aynı olan 32 bitlik bir kodlamadır (
fark, UCS-4'ün ne vekilleri ne de bundan daha büyük kod noktalarını yasaklamasıdır.
"0x10_FFFF").
· UTF-7
Taşıma veya depolama sırasında yararlı olan, yedi bitlik güvenli (sekiz bit olmayan) kodlama
sekiz bit güvenli değil. RFC 2152 tarafından tanımlanmıştır.
Karaktersiz kod noktaları
Unicode'da "karaktersiz kod noktaları" olarak 66 kod noktası ayrılmıştır. Bunların hepsi var
"Atanmamış" ("Cn") "General_Category" ve hiçbir karaktere hiçbir zaman atanmayacaktır.
onlara. Bunlar "U+FDD32" ile "U+FDEF" dahil arasındaki 0 kod noktasıdır ve 34 kod noktasıdır.
kod noktaları:
U+FFFE U+FFFF
U+1FFFE U+1FFFF
U+2FFFE U+2FFFF
Kendi ID’n ile mağazalarını oluştur
U+EFFFE U+EFFF
U+FFFFE U+FFFF
U+10FFFE U+10FFFF
Unicode 7.0'a kadar karakter olmayanlar "yasak açık takasta kullanılmak üzere
Unicode metin verileri", böylece bu akışları işleyen kod bu kod noktalarını kullanabilir
karakter verileriyle karıştırılabilecek nöbetçiler olarak ve her zaman
bu verilerden ayırt edilebilir. (Yukarıdaki ve sonraki paragraftaki vurgular eklenmiştir.
bu belge.)
Unicode 7.0, ifadeleri şu şekilde değiştirdi: "değil Tavsiye edilen açık kullanım için
Unicode metin verilerinin değişimi". 7.0 Standardı şöyle devam ediyor:
"Açık değişimde karakter dışı bir karakter alınırsa, başvuru yapılmasına gerek yoktur.
herhangi bir şekilde yorumlayın. Ancak bunu bir şey olarak kabul etmek iyi bir uygulamadır.
karakter dışı bir karakter kullanmak ve bunu "U+FFFD" ile değiştirmek gibi uygun işlemi yapmak
Metindeki sorunu belirtmek için değiştirme karakteri. tavsiye edilmez
potansiyel nedeniyle bu tür metinlerden karakter olmayan kod noktalarını silmeniz yeterlidir.
yorumlanmayan karakterlerin silinmesinden kaynaklanan güvenlik sorunları. (Uygunluk maddesine bakın
Bölüm 7'deki C3.2, Uygunluk Gereksinimleri ve Unicode Teknik Raporu #36,
"Unicode Güvenlik Hususları"
<http://www.unicode.org/reports/tr36/#Ill_Formed_Subsequences için_Substitutioning>)."
Bu değişiklik, editörler gibi çeşitli ticari araçların veya
kaynak kodu kontrolü gibi şeyler için, işlenmemeleri için yazılmıştı
Bu kod noktalarını kullanan program dosyaları, kullanımlarını neredeyse tamamen engelliyor
Baştan sona! Ve asla amaç bu değildi. Her zaman içinde kullanılabilir olmaları gerekiyordu
isteğe göre bir uygulama veya işbirliği yapan uygulamalar dizisi.
Bir editör gibi bir kod yazıyorsanız, bunun her türlü sorunu çözebilmesi gerekir.
Unicode metin verileri kullanıyorsanız bu kod noktalarını kendiniz kullanmamalısınız; bunun yerine
giriş yapmalarına izin verin. Eğer nöbetçilere ihtiyacınız varsa, onlar bunun yerine
yasal Unicode değil. UTF-8 verileri için 0xC1 ve 0xC2 baytlarını nöbetçi olarak kullanabilirsiniz.
hiçbir zaman iyi biçimlendirilmiş UTF-8'de görünmezler. (UTF-EBCDIC'in eşdeğerleri vardır). Yapabilirsiniz
ayrıca Unicode kod noktalarınızı tam sayı değişkenlerinde saklayın ve negatif değerleri kullanın.
nöbetçiler.
Eğer böyle bir araç yazmıyorsanız, karakter olmayanları girdi olarak kabul edip etmemek size bağlıdır.
siz (Standart bunu yapmamanızı tavsiye etse de). Sıkı giriş akışı kontrolü yaparsanız
Perl'de bu kod noktaları yasaklanmaya devam ediyor. Bu geriye doğru tutmaktır
uyumluluk (aksi takdirde şüphelenmeyen bir durum nedeniyle olası güvenlik açıkları açılabilir)
karakter olmayanların daha önce filtreleneceği varsayılarak yazılan uygulama
ona ulaştıktan sonra, artık hiçbir uyarıda bulunmadan onları almaya başlayabiliriz). Sıkı kontrol yapmak için,
":encoding('UTF-8')" katmanını kullanabilirsiniz.
Perl uyarmaya devam ediyor (bir alt kategori olan "nonchar" uyarı kategorisini kullanarak)
Karakter olmayanların çıktısı alınmaya çalışılırsa "utf8").
Ötesinde Unicode kod noktaları
Maksimum Unicode kod noktası "U+10FFFF"dir ve Unicode yalnızca koddaki işlemleri tanımlar
bunun üzerinden işaret ediyor. Ancak Perl izin verilen maksimum değere kadar kod noktaları üzerinde çalışır
imzasız numara platformda mevcuttur. Ancak Perl bunları girişten kabul etmeyecektir.
gevşek kurallar kullanılmadığı sürece akışlar ve uyarı verir (uyarı kategorisini kullanarak)
"utf8"in bir alt kategorisi olan "non_unicode", eğer varsa çıktılanır.
Bu kod noktalarında Unicode kuralları tanımlanmadığından, Unicode tanımlı bir işlem
Perl bunların üzerinde bir işlem yapıldığında, Perl mantıklı olduğuna inandığımız kuralları kullanır ve genel olarak uyarıda bulunur:
"non_unicode" kategorisini kullanarak. Örneğin, "uc("\x{11_0000}")" böyle bir sonuç üretecektir
uyarı, Perl'ün büyük harfini tanımladığı için giriş parametresini sonuç olarak döndürüyor
Unicode olmayan her kod noktası, kod noktasının kendisi olacaktır. (Tüm durum değişiyor
Yalnızca büyük harfle değil, işlemler de bu şekilde çalışır.)
Normal ifadelerde Unicode özelliklerinin eşleşmesiyle ilgili durum, "\p{}" ve
"\P{}" yapıları, bu kod noktalarına karşı o kadar net değildir ve bunların nasıl olduğu
deneyim kazandıkça ele alınan şey değişti.
Bir olasılık, bu kod noktalarına karşı herhangi bir eşleşmeyi tanımsız olarak ele almaktır. Ama o zamandan beri
Perl'de bir eşleşmenin tanımsız olması kavramı yoktur, bunu başarısızlığa dönüştürür veya
"YANLIŞ". Bu tam olarak olmasa da hemen hemen Perl'ün v5.14'ten itibaren yaptığı şeydir (bu kodun kullanımı
v5.18 aracılığıyla puanlar genel olarak güvenilir hale geldi. Aradaki fark Perl'ün her şeyi ele almasıdır
"\p{}" başarısız olarak eşleşir, ancak tüm "\P{}" başarılı olarak eşleşir.
Bununla ilgili bir sorun, bazı durumlarda beklenmedik ve kafa karıştırıcı sonuçlara yol açmasıdır.
durumlar:
chr(0x110000) =~ \p{ASCII_Hex_Digit=True} # <= v5.18'de Başarısız Oldu
chr(0x110000) =~ \p{ASCII_Hex_Digit=False} # Başarısız! <= v5.18'de
Yani, her iki eşleşmeyi de tanımsız olarak ele aldı ve bunu false değerine dönüştürdü (bir
her birinde uyarı). İlk durum beklenen sonuçtur, ancak ikincisi muhtemeldir
mantığa aykırı: "Tamamlayıcı olduklarında her ikisi de nasıl yanlış olabilir?" Başka bir problem
uygulamanın birçok Unicode özelliği eşleşmesini zaten optimize etmesiydi
Uyarıyı yükseltmeyen mevcut daha basit, daha hızlı işlemler. Vazgeçmemeyi seçtik
Maçların büyük çoğunluğuna yardımcı olan bu optimizasyonlar, yalnızca bir uyarı oluşturmak için
Unicode'un üzerindeki bir kod noktasının eşleştirildiği olası olmayan bir olay için.
Bu sorunların bir sonucu olarak, v5.20'den itibaren Perl'in yaptığı Unicode olmayanları ele almaktır.
kod noktaları yalnızca tipik atanmamış Unicode karakterlerdir ve buna göre eşleşir.
(Not: Unicode'un atipik atanmamış kod noktaları vardır. Örneğin, karakter dışı kod vardır
puanlar ve atandıklarında yazılması planlanan puanlar
Arapça ve İbranice gibi solda. Perl, Unicode olmayan hiçbir kod noktasının herhangi bir Unicode koduna sahip olmadığını varsayar.
atipik özellikler.)
Perl çoğu durumda Unicode'un üzerindeki bir kod noktasıyla eşleştiğinde bir uyarı verecektir.
sonuç "\p{}" için "TRUE" ve "\P{}" için "FALSE" olduğunda bir Unicode özelliğine karşı.
Örneğin:
chr(0x110000) =~ \p{ASCII_Hex_Digit=True} # Başarısız, uyarı yok
chr(0x110000) =~ \p{ASCII_Hex_Digit=False} # Başarılı, uyarıyla birlikte
Bu örneklerin her ikisinde de eşleştirilen karakter Unicode değildir, dolayısıyla Unicode
nasıl eşleşmesi gerektiğini tanımlayın. Açıkça bir ASCII onaltılık rakamı değil, bu yüzden ilk örnek
açıkça başarısız olması gerekir ve hiçbir uyarı vermeden başarısız olur. Ancak ikincisinin olduğu tartışılabilir.
örneğin tanımsız, dolayısıyla "YANLIŞ" sonucu olması gerekir. Bu yüzden bunun için bir uyarı yapıldı.
Böylece uyarı daha önceki Perls'e göre çok daha az durumda ve yalnızca
sonuç tartışılabilir olabilir. Perl tarafından yapılan optimizasyonların hiçbirinin yapılmadığı ortaya çıktı
(veya yapılması muhtemel) uyarının atlanmasına neden olur, böylece her ikisini de çözer
Perl'ün önceki yaklaşımının sorunları. Etkilenen en yaygın kullanılan mülk
bu değişiklik "\p{Atanmamış}" şeklindedir ve bunun kısa biçimidir.
"\p{General_Category=Atanmamış}". V5.20'den itibaren Unicode olmayan tüm kod noktaları
"Atanmamış" olarak kabul edilir. Daha önceki sürümlerde maçlar başarısız oldu çünkü sonuç şuydu:
tanımsız kabul edilir.
Uyarının olması gerektiği halde yapılmadığı tek yer şu:
optimizasyonlar tüm model eşleşmesinin denenmemesine bile neden olur. Örneğin, Perl'de
bir dizenin belirli bir düzenli ifade modeliyle eşleşmesi için dizenin
"foobar" alt dizesini içermelidir. Eşleştirmeyi denemeden önce Perl şunları arayabilir:
bu alt dize bulunmazsa, eşleşmeyi gerçekten denemeden hemen başarısız olur;
dolayısıyla dize Unicode'un üzerinde bir kod noktası içerse bile hiçbir uyarı oluşturulmaz.
Bu davranış, çoğu uygulama için önceki Perls'e göre daha "Ne demek istediğimi yap" davranışıdır. Ancak
Kesinlikle Unicode uyumlu olması gereken kodlarda daha az sorun yakalar. Öyleyse
bu tür kodlara uyum sağlamak için ek bir çalışma modu mevcuttur. Bu mod
düzenli ifade modelinin sözcük kapsamı içinde derlenmesi durumunda etkinleştirilir;
"non_unicode" uyarı sınıfı şu şekilde ölümcül hale getirildi:
uyarıları kullanın FATAL => "unicode olmayan"
(uyarılara bakın). Bu çalışma modunda Perl tüm eşleşmeler için uyarıyı yükseltecektir.
Unicode olmayan bir kod noktasına karşı (yalnızca tartışılabilir olanlara değil) ve
uyarının verilmemesine neden olabilecek optimizasyonlar. (Şu anda hala çalışmıyor
Yukarıdaki "foobar" örneğinde olduğu gibi, eşleşmeye çalışılmazsa uyarı verin.)
Özetle, Perl artık normalde Unicode olmayan kod noktalarını tipik atanmamış Unicode gibi ele alıyor
düzenli ifade eşleşmeleri için kod noktaları; yalnızca tartışılabilir olduğunda uyarı verilmesi
sonuç ne olmalı. Ancak bu uyarı ölümcül hale getirildiyse,
atlandı.
Bütün bunların bir istisnası var. "\p{Tümü}" bir Unicode özelliğine benziyor ancak
Unicode olsun ya da olmasın tüm olası kod noktaları için doğru olarak tanımlanan Perl uzantısı, yani
Bunu Unicode olmayan bir kod noktasıyla eşleştirirken hiçbir uyarı oluşturulmaz. (Önceki
v5.20'ye kadar, "\p{Herhangi biri}" ile tam olarak eşanlamlıydı ve 0'dan 0x10FFFF'ye kadar olan kod noktalarıyla eşleşiyordu.)
Güvenlik Etkileri of Unicode
Öncelikle Unicode Güvenliğiyle İlgili Hususlar'ı okuyunhttp://www.unicode.org/reports/tr36>.
Ayrıca aşağıdakilere dikkat edin:
· Hatalı biçimlendirilmiş UTF-8
Ne yazık ki, UTF-8'in orijinal spesifikasyonu yoruma biraz yer bırakıyor
tek bir Unicode girişinden kaç baytlık kodlanmış çıktı üretilmesi gerektiği
karakter. Açıkça söylemek gerekirse, UTF-8 baytlarının mümkün olan en kısa dizisi şu şekilde olmalıdır:
Aksi takdirde giriş arabelleği taşması potansiyeli olacağından
UTF-8 bağlantısının alıcı sonu. Perl her zaman en kısa uzunluktaki UTF-8'i üretir,
ve uyarılar açıkken Perl, diğerleriyle birlikte en kısa olmayan UTF-8 hakkında uyarıda bulunacaktır.
geçerli Unicode kod noktaları olmayan vekiller gibi malformasyonlar
takas.
· Düzenli ifade deseni eşleştirmeye alışkın değilseniz sizi şaşırtabilir
Unicode. Perl 5.14'ten başlayarak, kontrol etmek için çeşitli desen değiştiriciler mevcuttur.
buna karakter seti değiştiricileri adı verilir. Ayrıntılar "Karakter seti" bölümünde verilmiştir.
Perlre'de değiştiriciler".
Başka bir yerde tartışıldığı gibi, Perl'ün iki dünyanın her birine bir ayağı (iki toynağı?) dikilmiştir:
ASCII ve tek baytlık yerel ayarların eski dünyası ve Unicode'un yeni dünyası,
gerekli. Eski kodunuz açıkça Unicode kullanmıyorsa otomatik geçiş yapılamaz
Unicode'a gerçekleşmesi gerekir.
Unicode in Perl on EBCDIC
Unicode, EBCDIC platformlarında desteklenir. Bkz. perlebcdic.
ASCII ve EBCDIC sorunları özel olarak tartışılmadığı sürece UTF-8'e yapılan atıflar
Bu belgede ve başka yerlerdeki kodlama, EBCDIC'de UTF-EBCDIC olarak okunmalıdır.
platformlar. Perlebcdic'te "Unicode ve UTF" konusuna bakın.
UTF-EBCDIC, UTF-8'e çok benzediğinden, farklar çoğunlukla sizden gizlenir;
"utf8 kullan" (ve "utfebcdic kullan" gibi bir şey DEĞİLDİR) betiğin içinde olduğunu bildirir
platformun "yerel" 8 bitlik Unicode kodlaması. (Benzer şekilde ":utf8" katmanı için de.)
yerel
Perllocale'de "Unicode ve UTF-8" konusuna bakın
Ne zaman Unicode Mı Değil Happen
Unicode'un (bazı kodlamalarda veya başka bir şekilde) şu şekilde verilebileceği hala birçok yer var:
Perl'de argümanlar veya sonuç olarak alınan veya her ikisi de, ancak Perl'in sahip olmasına rağmen öyle değil
Unicode'da giriş ve çıkış yapmanın kapsamlı yolları ve aşağıdakiler gibi diğer birkaç "giriş noktası"
@ARGV dizisi (bazen UTF-8 olarak yorumlanabilir).
Aşağıdakiler bu tür arayüzlerdir. Ayrıca bkz. "Unicode Hatası". Bütün bunlar için
arayüzler Perl şu anda (v5.16.0'dan itibaren) bayt dizelerini hem argüman olarak kabul ediyor
ve sonuçlar veya (kullanımdan kaldırılmış) "kodlama" pragması kullanılmışsa UTF-8 dizeleri.
Perl'ün bu durumlarda Unicode'un rolünü çözmeye çalışmamasının bir nedeni
cevapların büyük ölçüde işletim sistemine ve dosya sistemlerine bağlı olmasıdır.
Örneğin, dosya adlarının Unicode olup olamayacağı ve tam olarak ne tür bir kodlamada olabileceği
tam olarak taşınabilir bir kavram değil. Benzer şekilde "qx" ve "system" için de:
"Komut satırı arayüzü" (ve bunlardan hangisi?) Unicode'u işliyor mu?
· "chdir", "chmod", "chown", "chroot", "exec", "link", "lstat", "mkdir", "yeniden adlandır",
"rmdir", "stat", "sembolik bağlantı", "kes", "bağlantıyı kaldır", "utime", "-X"
· %ENV
· "glob" ("<*>" olarak da bilinir)
· "açık", "opendir", "sysopen"
· "qx" (diğer adıyla geri tıklama operatörü), "sistem"
· "okunandir", "okunan bağlantı"
The "Unicode Böcek"
"Unicode hatası" terimi, kod noktalarıyla tutarsızlık için uygulanmıştır.
"Latin-1 Supplement" bloğu yani 128 ile 255 arasında. Yerel ayar belirtilmeden,
diğer tüm karakterlerin veya kod noktalarının aksine, bu karakterlerin çok farklı özellikleri olabilir.
Geçerli kurallara bağlı olarak anlambilim. (Kod puanı 255'in üzerinde olan karakterler
Unicode kurallarını zorlamak; ASCII karakterleri için kurallar her iki ASCII'de de aynıdır.
ve Unicode kuralları.)
Unicode kurallarına göre, bu üst Latin1 karakterleri Unicode kod noktaları olarak yorumlanır.
bu, Latin-1 (ISO-8859-1) ve C1 kontrolleriyle aynı anlamlara sahip oldukları anlamına gelir.
"ASCII Kuralları ve Unicode Kuralları" bölümünde açıklandığı gibi, ASCII kuralları kapsamında bunlar dikkate alınır.
atanmamış karakterler olacaktır.
Bu beklenmedik sonuçlara yol açabilir. Örneğin, bir dizenin anlambilimi aniden
255'in üzerinde bir kod noktası eklenirse değişiklik olur; bu, kuralları ASCII'den ASCII'ye değiştirir.
Unicode. Örnek olarak aşağıdaki programı ve çıktısını düşünün:
$ perl -le'
'unicode_strings' özelliği yok;
$s1 = "\xC2";
$s2 = "\x{2660}";
için ($s1, $s2, $s1.$s2) {
yazdır /\w/ || 0;
}
'
0
0
1
"s1"de veya "s2"de "\w" yoksa neden bunların birleşiminde bir tane var?
Bu anormallik, Perl'ün, kullanılmayan eski programları rahatsız etmeme girişiminden kaynaklanmaktadır.
Unicode, Perl'ün Unicode desteğini sorunsuz bir şekilde ekleme arzusuyla birlikte. Ama sonuç
sorunsuz olmadığı ortaya çıktı. (Bu arada, aşağıdaki gibi durumlarda uyarılmayı seçebilirsiniz:
Bu oldu. Bkz. "kodlama::uyarılar".)
Bu sorunu gidermek için Perl v5.12'den başlayarak "'unicode_strings' özelliğini kullan" eklendi
sorun. Şu şeyleri etkiler:
· Bir skalerin büyük/küçük harf değişimi, yani "uc()", "ucfirst()", "lc()" ve
Normal gibi çift tırnaklı bağlamlarda "lcfirst()" veya "\L", "\U", "\u" ve "\l"
ifade ikameleri.
Perl 5.12.0'dan başlayarak "unicode_strings" altında genellikle Unicode kuralları kullanılır.
Bunun diğer çeşitli uygulamalarla birlikte nasıl çalıştığına ilişkin ayrıntılar için perlfunc'ta "lc"ye bakın.
pragmalar.
· Büyük/küçük harfsiz ("/i") düzenli ifade eşleştirmesinin kullanılması.
Perl 5.14.0'dan itibaren düzenli ifadeler kapsamında derlendi
"unicode_strings" yürütüldüğünde veya daha büyük normal biçimlerde derlendiğinde bile Unicode kurallarını kullanır
kapsam dışında kalan ifadeler.
· Düzenli ifadelerdeki çeşitli özelliklerden herhangi birinin eşleştirilmesi.
Bu özellikler "\b" (parantezsiz), "\B" (parantezsiz), "\s", "\S", "\w",
"\W" ve tüm Posix karakter sınıfları dışında "[[:ascii:]]".
Perl 5.14.0'dan itibaren düzenli ifadeler kapsamında derlendi
"unicode_strings" yürütüldüğünde veya daha büyük normal biçimlerde derlendiğinde bile Unicode kurallarını kullanır
kapsam dışında kalan ifadeler.
· "quotemeta" veya satır içi eşdeğeri "\Q".
Perl 5.16.0'dan itibaren tutarlı alıntı kuralları kullanılmaya başlandı.
Perlfunc'taki "quotemeta" bölümünde açıklandığı gibi "unicode_strings". Bundan önce veya dışarıda
kapsamı, UTF-127 kodlu dizelerde 8'nin üzerindeki hiçbir kod noktası alıntılanmaz, ancak bayt cinsinden
kodlanmış dizeler, 128-255 arasındaki kod noktaları her zaman alıntılanır.
Yukarıdan "unicode_strings" etkisinin birkaç kez arttığını görebilirsiniz.
Perl yayınlanıyor. (Ve Perl'ün Unicode desteği gelişmeye devam ediyor;
Mümkün olan en eksiksiz ve doğru sonuçları elde etmek için mevcut en son sürüm.)
"5.012" veya üstünü kullanıyorsanız "unicode_strings"in otomatik olarak seçildiğini unutmayın.
Yukarıda açıklananlardan önceki Perl'ler için veya bir işleve bir dize aktarıldığında
"unicode_strings" kapsamı dışındaysa sonraki bölüme bakın.
Zorlama Unicode in Perl (Veya zorlama Unicode in Perl)
Bazen ("Unicode Olmadığında" veya "Unicode Hatası" bölümüne bakın) bazı durumlar olabilir
burada bir bayt dizesini UTF-8'e veya tam tersi yönde zorlamanız yeterlidir. Standart
Bunun için Encode modülü kullanılabilir veya düşük seviyeli "utf8::upgrade($bytestring)" çağrıları yapılabilir.
ve "utf8::downgrade($utf8string[, FAIL_OK])".
Dize sığmayan karakterler içeriyorsa "utf8::downgrade()" işleminin başarısız olabileceğini unutmayın
bir bayta.
Zaten istenen durumda olan bir dize üzerinde her iki işlevin çağrılması işlem dışıdır.
"ASCII Kuralları ve Unicode Kuralları", bir dizenin Unicode kullanacak şekilde oluşturulmasına ilişkin tüm yolları sunar
kuralları.
kullanma Unicode in XS
XS düzeyinde Unicode'a giriş için perlguts'taki "Unicode Desteği" konusuna bakın ve
API ayrıntıları için perlapi'de "Unicode Desteği".
hack Perl için iş on daha erken Unicode sürümler (için çok ciddi hackerlar sadece)
Perl varsayılan olarak desteklenen en son Unicode sürümüyle birlikte gelir, ancak amaç
daha önceki herhangi birini kullanmak üzere değiştirmenize izin vermek için. Ancak Perls v5.20 ve v5.22'de
Kullanılabilen en eski sürüm Unicode 5.1'dir. Perl v5.18 daha öncekilerin hepsini halledebiliyor
sürümleri.
Unicode web sitesinden istenen Unicode sürümündeki dosyaları indirin
<http://www.unicode.org>). Bunlar mevcut dosyaların yerini almalıdır kütüphane/tek çekirdekli içinde
Perl kaynak ağacı. içindeki talimatları izleyin README.perl bazılarını değiştirmek için bu dizinde
adlarını seçin ve ardından Perl'i oluşturun (bkz. KURULUM).
uyarlanır? kod itibaren perl-5.6.X
5.8'de başlayan Perl'ler, 5.6'dan farklı bir Unicode modeline sahiptir. 5.6'da programcı
Belirli bir kapsamın ele alınması beklendiğini bildirmek için "utf8" pragmasını kullanmak gerekir
Unicode verileri ve bu kapsama yalnızca Unicode verilerinin ulaştığından emin olmak gerekiyordu. Eğer sen
5.6 ile çalışan bir kodunuz varsa, aşağıdaki ayarlamalardan bazılarına ihtiyacınız olacak:
senin kodun. Örnekler, kod 5.6 altında çalışmaya devam edecek şekilde yazılmıştır, dolayısıyla
bunları denemek için güvende olmalısınız.
· UTF-8 okuması veya yazması gereken bir dosya tanıtıcısı
eğer ($] > 5.008) {
binmode $fh, ":kodlama(utf8)";
}
· Bir uzantıya aktarılacak olan bir skaler
"Compress::Zlib", "Apache::Request" veya belirtilmeyen herhangi bir uzantı olsun.
Kılavuz sayfasındaki Unicode, UTF8 bayrağının kaldırıldığından emin olmanız gerekir. Not
bu yazının yazıldığı tarihte (Ocak 2012) bahsedilen modüller henüz mevcut değildi.
UTF-8 uyumlu. Bunun hala doğru olup olmadığını doğrulamak için lütfen belgeleri kontrol edin.
eğer ($] > 5.008) {
Kodlama gerektirir;
$val = Kodla::encode_utf8($val); # sekizli yap
}
· Bir uzantıdan aldığımız bir skaler
Skalerin UTF-8 olarak geri döneceğine inanıyorsanız büyük olasılıkla UTF8 bayrağını isteyeceksiniz
geri yüklendi:
eğer ($] > 5.008) {
Kodlama gerektirir;
$val = Kodla::decode_utf8($val);
}
· Aynı şey, eğer gerçekten UTF-8 olduğundan eminseniz
eğer ($] > 5.008) {
Kodlama gerektirir;
Kodla::_utf8_on($val);
}
· DBI "fetchrow_array" ve "fetchrow_hashref" için sarmalayıcı
Veritabanı yalnızca UTF-8 içerdiğinde sarmalayıcı işlevi veya yöntemi uygun bir yoldur
tüm "fetchrow_array" ve "fetchrow_hashref" çağrılarınızı değiştirmek için. Bir sarmalayıcı işlevi
ayrıca veritabanı sürücünüzde gelecekte yapılacak geliştirmelere uyum sağlamayı da kolaylaştıracaktır. Not
Bu yazının yazıldığı sırada (Ocak 2012), DBI'nin standartlaştırılmış bir yolu yoktur.
UTF-8 verileriyle ilgilenin. Hala geçerli olup olmadığını doğrulamak için lütfen DBI belgelerini kontrol edin.
doğru.
alt getirme {
# $fetchrow_{array,hasref}'den biri nedir
benim($kendim, $sth, $ne) = @_;
eğer ($] < 5.008) {
return $sth->$ne;
} Else {
Kodlama gerektirir;
eğer (istenen dizi) {
benim @arr = $sth->$ne;
(@arr) için {
tanımlanmış && /[^\000-\177]/ && Kodla::_utf8_on($_);
}
@arr'a dönüş;
} Else {
benim $ret = $sth->$ne;
if (ref $ret) {
benim $k için (anahtarlar %$ret) {
tanımlı
&& /[^\000-\177]/
&& Kodla::_utf8_on($_) for $ret->{$k};
}
$ret'i döndür;
} Else {
$ret; için tanımlanmış && /[^\000-\177]/ && Encode::_utf8_on($_)
$ret'i döndür;
}
}
}
}
· Bildiğiniz büyük bir skaler yalnızca ASCII içerebilir
Yalnızca ASCII içeren ve UTF-8 olarak işaretlenen skalerler bazen sizi rahatsız eder.
programı. Böyle bir durumla karşılaşırsanız UTF8 bayrağını kaldırmanız yeterlidir:
utf8::downgrade($val) if $] > 5.008;
Onworks.net hizmetlerini kullanarak perlunicode'u çevrimiçi kullanın