目錄
字符串(計算機科學)
編輯在計算機編程中,字符串傳統上是一個字符序列,可以作為一個字面常數或某種變量。后者可能允許其元素被突變,長度被改變,也可能是固定的(創建后)。字符串一般被認為是一種數據類型,通常被實現為一個字節(或字)的數組數據結構,它使用某種字符編碼來存儲元素序列,通常是字符。字符串也可以表示更一般的數組或其他序列(或列表)數據類型和結構。根據編程語言和所使用的精確數據類型,被聲明為字符串的變量可能會導致內存中的存儲被靜態分配為預定的xxx長度,或者采用動態分配以允許它持有可變數量的元素。當一個字符串在源代碼中出現時,它被稱為一個字符串字面或匿名字符串。在數理邏輯和理論計算機科學中使用的形式語言中,字符串是一個有限的符號序列,這些符號是從一個稱為字母表的集合中選擇的。
字符串數據類型
編輯字符串數據類型是以形式化字符串的概念為模型的數據類型。字符串是如此重要和有用的數據類型,以至于它們幾乎在每一種編程語言中都被實現。在一些語言中,它們可以作為原始類型,而在另一些語言中則作為復合類型。大多數高級編程語言的語法允許一個字符串,通常以某種方式加引號,來表示一個字符串數據類型的實例;這樣的元字符串被稱為字面或字符串字面。
字符串的長度
編輯雖然形式上的字符串可以有任意的有限長度,但現實語言中字符串的長度往往被限制在一個人為的xxx值。一般來說,有兩種類型的字符串數據類型:固定長度的字符串,它有一個固定的xxx長度,在編譯時確定,無論是否需要這個xxx長度,它都使用相同的內存;可變長度的字符串,它的長度不是任意固定的,它可以根據運行時的實際需求使用不同的內存(見內存管理)。現代編程語言中的大多數字符串都是可變長度的字符串。當然,即使是可變長度的字符串,其長度也是有限的--由可用的計算機內存的大小決定。字符串的長度可以作為一個單獨的整數來存儲(這可能會給長度帶來另一個人為的限制),或者通過一個終止字符來隱含,通常是一個所有位為零的字符值,比如在C編程語言中。
字符編碼
編輯字符串數據類型在歷史上為每個字符分配一個字節,雖然具體的字符集因地區而異,但字符編碼足夠相似,程序員往往可以忽略這一點,因為程序特別對待的字符(如句號、空格和逗號)在程序會遇到的所有編碼中都在同一個位置。這些字符集通常以ASCII或EBCDIC為基礎。如果一個編碼的文本在一個使用不同編碼的系統上顯示,文本往往會被攪亂,盡管往往有些可讀性,一些計算機用戶學會了閱讀攪亂的文本。像中文、日文和韓文(統稱為中日韓)這樣的標識語言,需要遠遠超過256個字符(每個字符一個8位字節的編碼極限)才能合理表達。通常的解決方案是為ASCII保留單字節表示法,為中日韓表意文字使用雙字節表示法。在現有代碼中使用這些方法會導致匹配和切割字符串的問題,其嚴重程度取決于字符編碼的設計方式。一些編碼,如EUC系列,保證ASCII范圍內的字節值只代表該ASCII字符,使編碼對使用這些字符作為字段分隔符的系統是安全的。
其他編碼,如ISO-2022和Shift-JIS,并沒有做出這樣的保證,使得字節碼的匹配不安全。這些編碼也不是自我同步的,因此定位字符邊界需要備份到字符串的開頭,而將兩個字符串粘貼在一起可能導致第二個字符串的損壞。Unicode在一定程度上簡化了這種情況。大多數編程語言現在都有一個用于Unicode字符串的數據類型。Unicode的首選字節流格式UTF-8被設計為不會出現上述老式多字節編碼的問題。UTF-8、UTF-16和UTF-32要求程序員知道固定大小的代碼單位與字符不同,目前的主要困難是設計不正確的API,試圖隱藏這種差異(UTF-32確實使代碼點固定大小,但由于組成代碼,這些不是字符)。
內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/164138/