首頁 > 後端開發 > php教程 > php各種編碼集詳解和以及在什麼情況下進行使用

php各種編碼集詳解和以及在什麼情況下進行使用

高洛峰
發布: 2023-03-01 13:22:02
原創
1067 人瀏覽過

字元集是多個字元的集合,字元集種類較多,每個字元集包含的字元個數不同,常見字元集名稱:ASCII字元集、GB2312字元集、BIG5字元集、 GB 18030字元集、Unicode字符集等。電腦要準確的處理各種字元集文字,需要進行字元編碼,以便電腦能夠辨識和儲存各種文字。

中文文字數目大,而且還分為簡體中文和繁體中文兩種不同書寫規則的文字,而計算機最初是按英語單字節字符設計的,因此,對中文字符進行編碼,是中文信息交流的技術基礎。本文將依照字符集的時間順序討論幾種典型的字符集,選取幾種代表性的中文字符集,研究歷史由來、特點、技術特徵。 

  ASCII 字元集 

  1.名稱的由來 

  ASCII(American Standard Code for Information Interchange,美國資訊交換器是基於羅馬字號的標準電腦程式碼系統。 

  2.特點 

  它主要用於顯示現代英語和其他西歐語言。它是現今最通用的單字節編碼系統,並等同於國際標準ISO 646。 

  3.包含內容 

  控製字元:回車鍵、退格、換行鍵等。

  可顯示字元:英文大小寫字元、阿拉伯數字和西文符號 

  4.技術特徵 

  7位元(bits)表示一個字符,共128 
  7位元(bits)表示一個字符,共128 
『 7位(bits)表示一個字符,共128 
『75〜75.編碼的字符集只能支援128個字符,為了表示更多的歐洲常用字符對ASCII進行了擴展,ASCII擴展字符集使用8位(bits)表示一個字符,共256字符。 

  ASCII擴充字元集比ASCII字元集擴充出來的符號包括表格符號、計算符號、希臘字母和特殊的拉丁符號。

  GB2312 字符集 

  1.名稱的由來 

  GB2312又稱為GB2312-80字符集,全標準信息信息類型用漢字編碼月1日實施。 

  2.特點 

  GB2312是中國國家標準的簡體中文字符集。它所收錄的漢字已經涵蓋99.75%的使用頻率,基本上滿足了漢字的電腦處理需求。在中國大陸和新加坡獲廣泛使用。 

  3.包含內容 

  GB2312收錄簡化漢字及一般符號、序號、數字、拉丁字母、日文假名、希臘字母、俄文字母、漢語拼音符號、漢語注音字母,共 7445 個圖形字元。其中包括6763個漢字,其中一級漢字3755個,二級漢字3008個;包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西里爾字母在內的682個全角字符。 

  4.技術特徵 

  (1)分區表示: 

  GB2312中對所收漢字進行了「分區」處理,每區含有94個漢字/符號。這種表示方式也稱為區位碼。

  各區包含的字符如下:01-09區為特殊符號;16-55區為一級漢字,按拼音排序;56-87區為二級漢字,按部首/筆畫排序;10-15區及88-94區則未有編碼。 

  (2)雙位元組表示 

  兩個位元組中前面的位元組為第一位元組,後面的位元組為第二位元組。習慣上稱第一位元組為「高位元組」 ,而稱第二位元組為「低位元組」。 

  「高位元組」使用了0xA1-0xF7(把01-87區的區號加上0xA0),「低位元組」使用了0xA1-0xFE(把01-94加上0xA0)。

  5.編碼舉例 

  以GB2312字符集的第一個漢字「啊」字為例,它的區號16,位號01,則區位碼是1601,在大多數計算機程式中,高字節和低位元組分別加0xA0得到程式的漢字處理編碼0xB0A1。計算公式為:0xB0=0xA0+16, 0xA1=0xA0+1。

  BIG5 字符集 

  1.名稱的由來 

  又稱大五碼或五大碼,1984年由台灣財團法人信息工業策進會和五間軟體公司 (AMicer)、神宏進會? 、佳佳、零壹(Zero One)、大眾(FIC)創立,故稱大五碼。

  Big5碼的產生,是因為當時台灣不同廠商各自推出不同的編碼,如倚天碼、IBM PS55、王安碼等,彼此不能兼容;另一方面,台灣政府當時尚未推出官方的漢字編碼,而中國大陸的GB2312編碼亦未有收錄繁體中文字。 

  2.特點 

  Big5字符集共收錄13,053個中文字,該字符集在中國台灣使用。耐人尋味的是該字符集重複地收錄了兩個相同的字:“兀”(0xA461及0xC94A)、“?亍?0xDCD1及0xDDFC)。 

  3.字符編碼方法 

  Big5碼使用了雙位元組儲存方法,以兩個位元組來編碼一個字。第一個位元組稱為“高位元組”,第二個位元組稱為“低位元組”。高位元組的編碼範圍0xA1-0xF9,低位元組的編碼範圍0x40-0x7E及0xA1-0xFE。

  各編碼範圍對應的字符類型如下:0xA140-0xA3BF為標點符號、希臘字母及特殊符號,另外於0xA259-0xA261,存放了雙音節度量衡單位用字:???????? 0xA440-0xC67E為常用漢字,先按筆劃再按部首排序;0xC940-0xF9D5為次常用漢字,亦是先按筆劃再按部首排序。

  4.Big5 的局限性 

  儘管Big5碼內包含一萬多個字符,但是沒有考慮社會上流通的人名、地名用字、方言用字、化學及生物科等用字,但沒有包含日文平假名及片假名字母。 

  例如台灣視「著」為「著」的異體字,故沒有收錄「著」字。康熙字典中的一些部首用字(如「亠」、「疒」、「?」、「?」等)、常見的人名用字(如「?搖薄ⅰ辦印薄ⅰ?唷薄ⅰ?鋇? 也沒有收錄到Big5之中。 2000年3月17日發布的新的漢字編碼國家標準,2001年8月31日後在中國市場上發布的軟體必須符合本標準 

  2.特點 

  GB 18030個字符集廣泛參與的出台和論證,來自國內外知名資訊科技產業的公司,資訊產業部和原國家品質技術監督局聯合實施。集電腦編碼問題。東亞地區資訊交換多文種、大字量、多用途、統一編碼格式的要求。 GB2312,GB13000.1)相容。碼(對應於ASCII碼的對應碼)。 FE。其中第一、三個位元組編碼碼位均為0×81至0×FE,第二、四個位元組編碼碼位元均為0×30至0×39。雙位元組部分收錄內容主要包括GB13000.1全部CJK漢字20902個、有關標點符號、表意文字描述符13個、增補的漢字和部首/構件80個、雙字節編碼的歐元符號等。節部分收錄了上述雙位元組字元以外的,包括CJK統一漢字擴充A在內的GB 13000.1中的全部字元。 -Octet Coded Character Set 通用多八位元編碼字元集的簡稱,是由一個名為Unicode 學術學會(Unicode Consortium)的機構制訂的字元編碼系統,支援現今世界各種不同語言的書面文字的交換、處理及顯示。該編碼於1990年開始研發,1994年正式公佈,最新版本是2005年3月31日的Unicode 4.1.0。 

  2.特徵 

  Unicode是一種在電腦上使用的字元編碼。它為每種語言中的每個字元設定了統一且唯一的二進位編碼,以滿足跨語言、跨平台進行文字轉換、處理的要求。 

  3.編碼方法 

  Unicode 標準始終使用十六進制數字,而且在書寫時在前面加上前綴“U+”,例如字母“A”的編碼為 004116 和字符“?”的編碼為 20AC16。所以「A」的編碼書寫為「U+0041」。 

  4.UTF-8 編碼 

  UTF-8是Unicode的其中一個使用方式。 UTF是 Unicode Translation Format,也就是把Unicode轉做某種格式的意思。 

  UTF-8便於不同的電腦之間使用網路傳輸不同語言和編碼的文字,使得雙位元組的Unicode能夠在現存的處理單字節的系統上正確傳輸。 

UTF-8使用可變長度位元組來儲存Unicode字符,例如ASCII字母繼續使用1位元組儲存,重音文字、希臘字母或西里爾字母等使用2位元組來儲存,而常用的漢字就要使用3字節。輔助平面字元則使用4位元組。

  5.UTF-16 和UTF-32 編碼 

  UTF-32、UTF-16 和UTF-8 是Unicode 標準的編碼字元集的字元編碼方案,UTF-16 使用一個或兩個未分配的16 位元代碼單元的序列對Unicode 代碼點進行編碼;UTF-32 即將每一個Unicode 代碼點表示為相同值的32 位元整數。

  php 各種應用亂碼問題的解決方法 

  1) 使用標籤設定頁面編碼 

  這個標籤的作用是聲明客戶端的瀏覽器用什麼字符集編碼
  這個標籤的作用是聲明客戶端的瀏覽器用什麼字符集編碼8(和MySQL 不同,MySQL 是UTF8)等等。因此,大部分頁面可以採用這種方式來告訴瀏覽器顯示這個頁面的時候採用什麼編碼,這樣才不會造成編碼錯誤而產生亂碼。但有的時候我們會發現有了這句還是不行,不管 xxx 是哪一種,瀏覽器採用的始終都是一種編碼,這個情況我後面會談到。 

  請注意, 是屬於 HTML 資訊的,只是一個聲明,只表示伺服器已經把 HTML 資訊傳到了瀏覽器。 

  2) header("content-type:text/html; charset=xxx"); 

  這個函數 header() 的功能是把括號內的資訊發到 http 裡面的資訊。如果括號裡面的內容為文中所說那樣,那作用和 標籤基本上相同,大家對照第一個看發現字符都差不多的。但不同的是如果有這段函數,瀏覽器就會永遠採用你所要求的 xxx 編碼,絕對不會不聽話,因此這個函數是很有用的。為什麼會這樣呢?那就得說說 http 標頭和 HTML資訊的差別了: 

  http 標頭是伺服器以 http 協定傳送 HTML 資訊到瀏覽器前所送出的字串。而 標籤是屬於 HTML 資訊的,所以 header() 傳送的內容先到達瀏覽器,通俗點就是 header() 的優先權高於 (不知道可不可以這樣講)。假如一個 php 頁面既有header("content-type:text/html;charset=xxx"),又有,瀏覽器就只認前者 http 標頭而不認 meta 了。當然這個函數只能在 php 頁面內使用。 

  同樣也留有一個問題,為什麼前者就絕對起作用,而後者有時候就不行呢?這就是接下來要談的Apache 的原因了。 

  3) AddDefaultCharset 

  Apache 根目錄的 conf 資料夾裡,有整個 Apache 的設定檔 httpd.conf。 

  用文字編輯器開啟 httpd.conf,第 708 行(不同版本可能不同)有 AddDefaultCharset xxx,xxx為編碼名稱。這行程式碼的意思:設定整個伺服器內的網頁檔案 http 標頭裡的字元集為你預設的 xxx字元集。有這行,就等於是為每個檔案加了一行 header("content-type:text/html; charset=xxx")。這就明白為什麼明明 設定了是 utf-8,可瀏覽器總是採用 gb2312 的原因。 

  如果網頁裡有 header("content-type:text/html; charset=xxx"),就把預設的字元集改為你設定的字元集,所以這個函數永遠有用。如果把 AddDefaultCharset xxx 前面加個"#",註解掉這句,而且頁面裡不含 header("content-type…"),那這個時候就輪到 meta 標籤起作用了。

  下面列出以上的優先順序: 

  header("content-type:text/html; charset=xxx") 

  ,建議給你的每個頁面都加個header("content-type:text/html;charset=xxx"),這樣可以保證它在任何伺服器都能正確顯示,可移植性也比較強。 

  4) php.ini 中的 default_charset 配置: 

  php.ini 中的 default_charset = "gb2312" 定義了 php 的預設語言字元集。一般建議註解掉此行,讓瀏覽器根據網頁頭中的 charset 來自動選擇語言而非做一個強制性的規定,這樣就可以在同台伺服器上提供多種語言的網頁服務。 

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板