Gelen bilgisayar bilimleri , bir karakter dizesi kavramsal sıralı seri hem karakterler ve fiziksel olarak sıralı bir dizi kod birimlerinin ( kod birimi ). String olan tip ait verilerin birçok bilgisayar dilleri . İngilizce çevirisi dizedir .
Öncülerin günlerinde, kendimizi 255 karakterle sınırlamak istemediğimizde, bugün kafa karıştırıcı olan karakter dizilerini ve bayt dizilerini sık sık karıştırdık. Uzantı olarak, bir bayt dizisini açıklamak için bir ikili dizeden bahsediyoruz .
Bazı diller 16 bitlik birimlerden dizeleri işlemeyi tercih eder.
Olarak Unicode'a , “Unicode dizesi” veri türü “kod birimi” sıralı bir dizisidir.
Çoğu programlama dili , dizelerin gösterimi ve manipülasyonu için tasarlanmış bir sınıf veya tür sunar .
Dil | Veri tipi | Açıklama |
---|---|---|
Python | str, unicode | Python 3.0 ile değiştirildi. |
Java | java.lang.String | Kaynaklarından, Java dizeleri Unicode dizeleri olmuştur . |
VS | char* ve char[] | C dili hiçbir zaman gerçek bir dizgi türü bilmemiştir. Karakter dizileri genellikle boş bayt ile biten tek baytlık karakter dizisine bir işaretçi tarafından simüle edilir. Bazı kitaplıklar , özellikle tek baytlık dizelerin sınırlamalarının üstesinden gelmek için dizeleri işlemek için vardır. |
C ++ | char*ve char[], basic_string<>( stringveya wstring) | Şablonları C sınıfı tanımlamak ++ std::string(tek bayt karakter tabanlı zincirleri). Ancak, standart C ++ kitaplığını kullanabilmek için genellikle "C tarzı dizgileri" değiştirmek gerekir . |
C ++ 2011 | char*ve char[], char16_t, char32_t, basic_string<>( stringveya wstring) | C ++ 2011'in evrimleri, Unicode karakter dizilerinin işlenmesini dikkate almayı mümkün kılar. |
VS# | string, StringveStringBuilder | string, Class String (System.String) için bir takma addır, bu nedenle string türü bir başvuru (işaretçi) ile eşleşmez. Ayrıca char * ve char [] kullanmak da mümkündür, ancak bu "güvenli olmayan" anahtar sözcüğün kullanılması anlamına gelir. StringBuilder, kodun çok fazla birleştirme yaptığı durumlar için önerilir. |
Pascal | String | Dize veri türü Pascal'da uzun süredir ortalıkta. Ancak, Delphi'nin ortaya çıkışından bu yana , birkaç tür dize eklenmiştir: AnsiString, UnicodeString ve WideString. |
Hedef C | char * ve NSString | NSString, değişmez bir unicode karakter dizesini temsil etmek için kullanılır. char *, bayt arabelleğini yönetmenize izin verir. |
Javascript | var |
En azından ECMAScript sürüm 3 ve 5'in her ikisi de bir String'i, metni temsil ederken UTF-16 kodunun birimleri olan işaretsiz 16 bitlik tamsayıların bir koleksiyonu olarak açık bir şekilde bildirir. |
Bayt kullanarak dizeleri temsil etmek için farklı teknikler mevcuttur. Genellikle her bir karakteri temsil edebilmeyi (kodlamayı), aynı zamanda dizenin sonunu işaretlemeyi gerektirirler.
Dizenin sonu, bir dizge sonu karakteri kullanılarak (genellikle 0, ancak MS-DOS'ta da kullanılmıştır ) veya karakter sayısını veya dizenin bayt sayısını eşzamanlı olarak depolayarak öğrenilebilir.
Her karakter, karakter kodlamasına bağlı olan bir dizi bayt ile temsil edilir . Kullanılan kodlamaya bağlı olarak, mevcut karakter setinde, dizelere göz atma algoritmalarında, birlikte çalışabilirlik ve / veya performans üzerinde sınırlar olabilir. Özellikle, genişletilmiş ASCII gibi tek baytlık karakterlere dayalı kodlamalar daha verimli olabilir, ancak uluslararasılaştırma ve / veya birlikte çalışabilirlik bağlamında sınırlayıcı ve / veya kısıtlayıcı olabilir. UTF-8 gibi diğer kodlamalar başka özelliklere sahiptir.
Bir bilgisayar belleğinde , ilk karakterin bellek adresi bilinmektedir. Dizenin sonunu sınırlandırmak için veya bir dizi sonlandırma karakteriyle ( C dilinde ikili sıfır ve buna " z ero ile bitti " yi belirtmek için ASCIIZ olarak atıfta bulunulur ) veya paralel olarak depolanan karakter sayısı ( BASIC , Pascal , PL / I ). Nesne yönelimli bazı dillerde , dizginin dahili kodlamasının bilinmesine gerek yoktur ( kapsülleme ).
|
|
Çıkış sırası da mevcut olabilir.
Temsil edilen karakter | AT | m | é | l | ben | e | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
UTF16-BE NFC | 0041 | 006d | 00e9 | 006c | 0069 | 0065 | |||||||||||||||||
UTF16-BE NFD | 0041 | 006d | 0065 | 0301 | 006c | 0069 | 0065 | ||||||||||||||||
UTF16-BE NFD | AT | m | e | ' | l | ben | e |
Örnek olarak, aşağıdaki tablo [3] 「日本語 版 Wikipedia」 (Wikipedia Japonca sürümü) dizesinin ISO-2022-JP ve Unicode kurallarıyla kodlanmasını açıklamaktadır .
ISO 2022'de örnekÖrnek resim tablosu aşağıdaki gibi biçimlendirilmiştir:
Temsil edilen karakter | 日 | 本 | 語 | 版 | W | ben | k | ben | p | e | d | ben | -de | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
機能 区 点 行列 |
JIS X 0208 を 指示 |
38-92 | 43-60 | 24-76 | 40-39 | ASCII を 指示 |
07/05 | 06/09 | 06/11 | 06/09 | 07/00 | 05/06 | 04/06 | 06/09 | 06/01 | ||||||||
bayt | 01/11 | 04/02 | 02/04 | 06/04 | 07/12 | 04/11 | 05/12 | 08/03 | 06/12 | 08/04 | 07/04 | 01/11 | 08/02 | 02/04 | 07/05 | 06/09 | 06/11 | 06/09 | 07/00 | 05/06 | 04/06 | 06/09 | 06/01 |
ESC | $ | B | F | | | K | \ | 8 | l | H | G | ESC | ( | B | W | ben | k | ben | p | e | d | ben | -de |
Not: Metin Amerikan standardının (ascii) 96 karakterinden biriyle başladığında ilk kaçış dizisi gerekli olmayabilir.
Unicode örneği「日本語 版 Wikipedia」 dizgesinin kodlanması 16 bitlik birimlerle yapılabilir.
Temsil edilen karakter | 日 | 本 | 語 | 版 | W | ben | k | ben | p | e | d | ben | -de | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
UTF16-BE | 65e5 | 672c | 8a9e | 7248 | 0057 | 0069 | 006b | 0069 | 0070 | 0065 | 0064 | 0069 | 0061 |
Bir programlama dilinde bir karakter dizesinin gösterimi sistemden sisteme değişir.
Bir karakter akışında bir karakter dizisini temsil etmek için (bir metin dosyası gibi , özellikle kaynak kodunda ), genellikle dizenin başlangıcını ve sonunu işaretlemek ve isteğe bağlı olarak kaçış dizilerini kullanmak gerekir .
Genellikle, bir karakter dizesini temsil etmek için, bir çift özel karakterle, genellikle çift tırnakla çevrelenmiştir. Örneğin, “Wikipedia” not edilecektir dokuz karakterden oluşan dize belirtmek için W , i , k , ı , s , é , d , i ve bir .
Örnekler:
Bu özel karakterleri kullanabilmek için kurallar vardır. Pascal dili ile, karakter dizgisine dahil edebilmek için tek alıntıyı ikiye katlıyoruz:
Diğer kurallar bir kaçış karakteri kullanır; Ters eğik çizgi en çok kullanılan karakterdir. Java, C, C ++ (ve diğerleri) dilleri için, bir karakter dizesinde çift tırnak eklemek için \ "yazıyoruz:
Pek çok algoritma , her biri farklı şekillere sahip olabilen dizeleri işlemek için son teknolojinin bir parçasıdır. Bu tür algoritmaların bazı kategorileri örnekleri:
Dizelerin geliştirici tarafından uygun şekilde değerlendirilmesi, genellikle karakterlerin farklı kullanımları hakkında bilgi sahibi olmayı gerektirir. Yirmi altı karakterden oluşan bir alfabede açık görünen işlemler, Unicode tarafından tanınan karakter kümesiyle mutlaka açık değildir. Küresel düzeyde dağıtılmayı amaçlayan bir uygulama için, bu, belirli kültürlerle bağlantılı yazının olası özellikleri nedeniyle zorlaşmaktadır: karakter eşdeğerliğinin varlığı, Asya karakterlerinin boyutu, yazının yönü, aynı harf için yazım çeşidi. özellikle pozisyonunda. Özellikle, kod birimlerini, kod noktalarını veya grafikleri saymak için kullanılıp kullanılmayacağını bilmek için karakterleri saymak kadar basit bir işlemin belirtilmesi gerekebilir.
Bununla birlikte, belirli programlama dilleri için kitaplıklar, bu ihtiyaçların kısmen karşılanmasını mümkün kılar.
Belirli programlama dillerinin belirli sınırlamaları, geliştiricilerin hatalar yazmasına veya bazı test uzmanlarının yalnızca sınırlı bir karakter aralığında doğru çalışmayı doğrulamasına yol açar. Özellikle, İngilizce konuşan geliştiricilerin yalnızca ASCII karakterleriyle sınırlı bir dizi test yapma gibi kötü bir alışkanlığı vardır.