久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

        手機(jī)站
        千鋒教育

        千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

        千鋒教育

        掃一掃進(jìn)入千鋒手機(jī)站

        領(lǐng)取全套視頻
        千鋒教育

        關(guān)注千鋒學(xué)習(xí)站小程序
        隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

        當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > 很多網(wǎng)站源碼是分為GBK和UTF-8版,為什么要同時(shí)開發(fā)兩種?

        很多網(wǎng)站源碼是分為GBK和UTF-8版,為什么要同時(shí)開發(fā)兩種?

        來(lái)源:千鋒教育
        發(fā)布人:xqq
        時(shí)間: 2023-10-12 21:08:40 1697116120

        一、很多網(wǎng)站源碼是分為GBK和UTF-8版,要同時(shí)開發(fā)兩種的原因

        GBK是微軟基于中國(guó)國(guó)標(biāo)GB2312發(fā)展來(lái)的,是Windows中文版的缺省編碼。一個(gè)文本沒有特別的編碼標(biāo)識(shí)符情況下,會(huì)被中文Windows識(shí)別為GBK編碼。而UTF-8在Windows系統(tǒng)下,微軟是規(guī)定需要有UTF8BOM標(biāo)示符才行的。因此,GBK編碼的使用,主要是為了兼容Windows系統(tǒng)。UTF8則是Linux的標(biāo)準(zhǔn)編碼,而且Linux標(biāo)準(zhǔn)中UTF8是不允許帶BOM標(biāo)示符的,Linux只允許UTF16,UTF32這些編碼帶BOM。因此,沒有任何標(biāo)示符的情況下,會(huì)被Linux識(shí)別為UTF8編碼,對(duì)UTF8的支持可以更好的兼容Linux平臺(tái)。Linux中使用GBK,或者Windows中使用UTF8,當(dāng)然也可以,只不過(guò),可能需要額外的折騰或者遇上額外的問題,有經(jīng)驗(yàn)的程序員才能很好的處理?,F(xiàn)在很多Linux程序員會(huì)試圖在Windows下也使用UTF8。如果你是老手,隨便選一個(gè)編碼都可以。但如果你是新手小白,那么較好是在Windows中使用GBK,Linux中使用UTF8。簡(jiǎn)要的來(lái)說(shuō),那些網(wǎng)站本身允許你部署到Windows或者Linux,而這兩個(gè)平臺(tái)的缺省編碼不同,這種網(wǎng)站源碼本身就是為了讓最入門的初級(jí)程序員也能成功部署,所以做了兩個(gè)版本用來(lái)兼容兩個(gè)不同的操作系統(tǒng)平臺(tái)。

        二、ASCII、Unicode、GBK和UTF-8概述

        1、基礎(chǔ)知識(shí)

        計(jì)算機(jī)中儲(chǔ)存的信息都是用二進(jìn)制數(shù)表示的;而我們?cè)谄聊簧峡吹降挠⑽?、漢字等字符是二進(jìn)制數(shù)轉(zhuǎn)換之后的結(jié)果。通俗的說(shuō),按照何種規(guī)則將字符存儲(chǔ)在計(jì)算機(jī)中,如’a’用什么表示,稱為“編碼”;反之,將存儲(chǔ)在計(jì)算機(jī)中的二進(jìn)制數(shù)解析顯示出來(lái),稱為“解碼”,如同密碼學(xué)中的加密和解密。在解碼過(guò)程中,如果使用了錯(cuò)誤的解碼規(guī)則,則導(dǎo)致’a’解析成’b’或者亂碼。

        字符集(Charset):是一個(gè)系統(tǒng)支持的所有抽象字符的集合。字符是各種文字和符號(hào)的總稱,包括各國(guó)家文字、標(biāo)點(diǎn)符號(hào)、圖形符號(hào)、數(shù)字等。

        字符編碼(Character Encoding):是一套法則,使用該法則能夠?qū)ψ匀徽Z(yǔ)言的字符的一個(gè)集合(如字母表或音節(jié)表),與其他東西的一個(gè)集合(如號(hào)碼或電脈沖)進(jìn)行配對(duì)。即在符號(hào)集合與數(shù)字系統(tǒng)之間建立對(duì)應(yīng)關(guān)系,它是信息處理的一項(xiàng)基本技術(shù)。通常人們用符號(hào)集合(一般情況下就是文字)來(lái)表達(dá)信息。而以計(jì)算機(jī)為基礎(chǔ)的信息處理系統(tǒng)則是利用元件(硬件)不同狀態(tài)的組合來(lái)存儲(chǔ)和處理信息的。元件不同狀態(tài)的組合能代表數(shù)字系統(tǒng)的數(shù)字,因此字符編碼就是將符號(hào)轉(zhuǎn)換為計(jì)算機(jī)可以接受的數(shù)字系統(tǒng)的數(shù),稱為數(shù)字代碼。

        常見的字符集有ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。計(jì)算機(jī)要準(zhǔn)確的處理各種字符集文字,需要進(jìn)行字符編碼,以便計(jì)算機(jī)能夠識(shí)別和存儲(chǔ)各種文字。

        2、ASCII 碼

        我們知道,計(jì)算機(jī)內(nèi)部,所有信息最終都是一個(gè)二進(jìn)制值。每一個(gè)二進(jìn)制位(bit)有0和1兩種狀態(tài),因此八個(gè)二進(jìn)制位就可以組合出256種狀態(tài),這被稱為一個(gè)字節(jié)(byte)。也就是說(shuō),一個(gè)字節(jié)一共可以用來(lái)表示256種不同的狀態(tài),每一個(gè)狀態(tài)對(duì)應(yīng)一個(gè)符號(hào),就是256個(gè)符號(hào),從00000000到11111111。

        上個(gè)世紀(jì)60年代,美國(guó)制定了一套字符編碼,對(duì)英語(yǔ)字符與二進(jìn)制位之間的關(guān)系,做了統(tǒng)一規(guī)定。這被稱為 ASCII 碼,一直沿用至今。ASCII 碼一共規(guī)定了128個(gè)字符的編碼,比如空格SPACE是32(二進(jìn)制00100000),大寫的字母A是65(二進(jìn)制01000001)。這128個(gè)符號(hào)(包括32個(gè)不能打印出來(lái)的控制符號(hào)),只占用了一個(gè)字節(jié)的后面7位,最前面的一位統(tǒng)一規(guī)定為0。

        3、非 ASCII 編碼

        英語(yǔ)用128個(gè)符號(hào)編碼就夠了,但是用來(lái)表示其他語(yǔ)言,128個(gè)符號(hào)是不夠的。比如,在法語(yǔ)中,字母上方有注音符號(hào),它就無(wú)法用 ASCII 碼表示。于是,一些歐洲國(guó)家就決定,利用字節(jié)中閑置的較高位編入新的符號(hào)。比如,法語(yǔ)中的é的編碼為130(二進(jìn)制10000010)。這樣一來(lái),這些歐洲國(guó)家使用的編碼體系,可以表示非常多256個(gè)符號(hào)。

        于是就產(chǎn)生了擴(kuò)展ASCII編碼表,但是,這里又出現(xiàn)了新的問題。不同的國(guó)家有不同的字母,因此,哪怕它們都使用256個(gè)符號(hào)的編碼方式,代表的字母卻不一樣。比如,130在法語(yǔ)編碼中代表了é,在希伯來(lái)語(yǔ)編碼中卻代表了字母Gimel (?),在俄語(yǔ)編碼中又會(huì)代表另一個(gè)符號(hào)。但是不管怎樣,所有這些編碼方式中,0–127表示的符號(hào)是一樣的,不一樣的只是128–255的這一段。

        至于亞洲國(guó)家的文字,使用的符號(hào)就更多了,漢字就多達(dá)10萬(wàn)左右。一個(gè)字節(jié)只能表示256種符號(hào),肯定是不夠的,就必須使用多個(gè)字節(jié)表達(dá)一個(gè)符號(hào)。比如,簡(jiǎn)體中文常見的編碼方式是 GB2312,使用兩個(gè)字節(jié)表示一個(gè)漢字,所以理論上非常多可以表示 256 x 256 = 65536 個(gè)符號(hào)。

        4、Unicode

        世界上存在著多種編碼方式,同一個(gè)二進(jìn)制數(shù)字可以被解釋成不同的符號(hào)。因此,要想打開一個(gè)文本文件,就必須知道它的編碼方式,否則用錯(cuò)誤的編碼方式解讀,就會(huì)出現(xiàn)亂碼。為什么電子郵件常常出現(xiàn)亂碼?就是因?yàn)榘l(fā)信人和收信人使用的編碼方式不一樣。

        可以想象,如果有一種編碼,將世界上所有的符號(hào)都納入其中。每一個(gè)符號(hào)都給予一個(gè)獨(dú)一無(wú)二的編碼,那么亂碼問題就會(huì)消失。這就是 Unicode,就像它的名字都表示的,這是一種所有符號(hào)的編碼。Unicode 當(dāng)然是一個(gè)很大的集合,現(xiàn)在的規(guī)模可以容納100多萬(wàn)個(gè)符號(hào)。每個(gè)符號(hào)的編碼都不一樣,比如,U+0639表示阿拉伯字母Ain,U+0041表示英語(yǔ)的大寫字母A,U+4E25表示漢字嚴(yán)。具體的符號(hào)對(duì)應(yīng)表,可以查詢unicode.org,或者專門的漢字對(duì)應(yīng)表。

        5、Unicode 的問題

        需要注意的是,Unicode 只是一個(gè)符號(hào)集,它只規(guī)定了符號(hào)的二進(jìn)制代碼,卻沒有規(guī)定這個(gè)二進(jìn)制代碼應(yīng)該如何存儲(chǔ)。比如,漢字嚴(yán)的 Unicode 是十六進(jìn)制數(shù)4E25,轉(zhuǎn)換成二進(jìn)制數(shù)足足有15位(100111000100101),也就是說(shuō),這個(gè)符號(hào)的表示至少需要2個(gè)字節(jié)。表示其他更大的符號(hào),可能需要3個(gè)字節(jié)或者4個(gè)字節(jié),甚至更多。

        這里就有兩個(gè)嚴(yán)重的問題,名列前茅個(gè)問題是,如何才能區(qū)別 Unicode 和 ASCII ?計(jì)算機(jī)怎么知道三個(gè)字節(jié)表示一個(gè)符號(hào),而不是分別表示三個(gè)符號(hào)呢?第二個(gè)問題是,我們已經(jīng)知道,英文字母只用一個(gè)字節(jié)表示就夠了,如果 Unicode 統(tǒng)一規(guī)定,每個(gè)符號(hào)用三個(gè)或四個(gè)字節(jié)表示,那么每個(gè)英文字母前都必然有二到三個(gè)字節(jié)是0,這對(duì)于存儲(chǔ)來(lái)說(shuō)是極大的浪費(fèi),文本文件的大小會(huì)因此大出二三倍,這是無(wú)法接受的。

        它們?cè)斐傻慕Y(jié)果是:出現(xiàn)了 Unicode 的多種存儲(chǔ)方式,也就是說(shuō)有許多種不同的二進(jìn)制格式,可以用來(lái)表示 Unicode;Unicode 在很長(zhǎng)一段時(shí)間內(nèi)無(wú)法推廣,直到互聯(lián)網(wǎng)的出現(xiàn)。

        6、UTF-8

        互聯(lián)網(wǎng)的普及,強(qiáng)烈要求出現(xiàn)一種統(tǒng)一的編碼方式。UTF-8 就是在互聯(lián)網(wǎng)上使用最廣的一種 Unicode 的實(shí)現(xiàn)方式。其他實(shí)現(xiàn)方式還包括 UTF-16(字符用兩個(gè)字節(jié)或四個(gè)字節(jié)表示)和 UTF-32(字符用四個(gè)字節(jié)表示),不過(guò)在互聯(lián)網(wǎng)上基本不用。重復(fù)一遍,這里的關(guān)系是,UTF-8 是 Unicode 的實(shí)現(xiàn)方式之一。

        UTF-8 最大的一個(gè)特點(diǎn),就是它是一種變長(zhǎng)的編碼方式。它可以使用1~4個(gè)字節(jié)表示一個(gè)符號(hào),根據(jù)不同的符號(hào)而變化字節(jié)長(zhǎng)度。UTF-8 的編碼規(guī)則很簡(jiǎn)單,只有二條:

        對(duì)于單字節(jié)的符號(hào):字節(jié)的名列前茅位設(shè)為0,后面7位為這個(gè)符號(hào)的 Unicode 碼。因此對(duì)于英語(yǔ)字母,UTF-8 編碼和 ASCII 碼是相同的;對(duì)于n字節(jié)的符號(hào)(n > 1):名列前茅個(gè)字節(jié)的前n位都設(shè)為1,第n + 1位設(shè)為0,后面字節(jié)的前兩位一律設(shè)為10。剩下的沒有提及的二進(jìn)制位,全部為這個(gè)符號(hào)的 Unicode 碼。

        解讀 UTF-8 編碼非常簡(jiǎn)單。如果一個(gè)字節(jié)的名列前茅位是0,則這個(gè)字節(jié)單獨(dú)就是一個(gè)字符;如果名列前茅位是1,則連續(xù)有多少個(gè)1,就表示當(dāng)前字符占用多少個(gè)字節(jié)。下面,還是以漢字嚴(yán)為例,演示如何實(shí)現(xiàn) UTF-8 編碼。

        嚴(yán)的 Unicode 是4E25(100111000100101),根據(jù)上表,可以發(fā)現(xiàn)4E25處在第三行的范圍內(nèi)(0000 0800 – 0000 FFFF),因此嚴(yán)的 UTF-8 編碼需要三個(gè)字節(jié),即格式是1110xxxx 10xxxxxx 10xxxxxx。然后,從嚴(yán)的最后一個(gè)二進(jìn)制位開始,依次從后向前填入格式中的x,多出的位補(bǔ)0。這樣就得到了,嚴(yán)的 UTF-8 編碼是11100100 10111000 10100101,轉(zhuǎn)換成十六進(jìn)制就是E4B8A5。

        7、Unicode 與 UTF-8 之間的轉(zhuǎn)換

        通過(guò)剛才的例子,可以看到嚴(yán)的 Unicode碼 是4E25,UTF-8 編碼是E4B8A5,兩者是不一樣的。它們之間的轉(zhuǎn)換可以通過(guò)程序?qū)崿F(xiàn)。Windows平臺(tái),有一個(gè)最簡(jiǎn)單的轉(zhuǎn)化方法,就是使用內(nèi)置的記事本小程序notepad.exe。打開文件后,點(diǎn)擊文件菜單中的另存為命令,會(huì)跳出一個(gè)對(duì)話框,在最底部有一個(gè)編碼的下拉條。

        里面有四個(gè)選項(xiàng):ANSI,Unicode,Unicode big endian和UTF-8。

        ANSI是默認(rèn)的編碼方式:對(duì)于英文文件是ASCII編碼,對(duì)于簡(jiǎn)體中文文件是GB2312編碼(只針對(duì) Windows 簡(jiǎn)體中文版,如果是繁體中文版會(huì)采用 Big5 碼);Unicode編碼這里指的是notepad.exe使用的 UCS-2 編碼方式:即直接用兩個(gè)字節(jié)存入字符的 Unicode 碼,這個(gè)選項(xiàng)用的 little endian 格式;Unicode big endian編碼與上一個(gè)選項(xiàng)相對(duì)應(yīng):我在下一節(jié)會(huì)解釋 little endian 和 big endian 的涵義;UTF-8編碼:也就是上一節(jié)談到的編碼方法。

        選擇完“編碼方式”后,點(diǎn)擊“保存”按鈕,文件的編碼方式就立刻轉(zhuǎn)換好了。

        延伸閱讀1:GB 18030的特點(diǎn):

        與UTF-8相同,采用多字節(jié)編碼,每個(gè)字可以由1個(gè)、2個(gè)或4個(gè)字節(jié)組成;編碼空間龐大,非常多可定義161萬(wàn)個(gè)字符;支持中國(guó)國(guó)內(nèi)少數(shù)民族的文字,不需要?jiǎng)佑迷熳謪^(qū);漢字收錄范圍包含繁體漢字以及日韓漢字。
        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
        請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
        免費(fèi)領(lǐng)取
        今日已有369人領(lǐng)取成功
        劉同學(xué) 138****2860 剛剛成功領(lǐng)取
        王同學(xué) 131****2015 剛剛成功領(lǐng)取
        張同學(xué) 133****4652 剛剛成功領(lǐng)取
        李同學(xué) 135****8607 剛剛成功領(lǐng)取
        楊同學(xué) 132****5667 剛剛成功領(lǐng)取
        岳同學(xué) 134****6652 剛剛成功領(lǐng)取
        梁同學(xué) 157****2950 剛剛成功領(lǐng)取
        劉同學(xué) 189****1015 剛剛成功領(lǐng)取
        張同學(xué) 155****4678 剛剛成功領(lǐng)取
        鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
        董同學(xué) 138****2867 剛剛成功領(lǐng)取
        周同學(xué) 136****3602 剛剛成功領(lǐng)取
        相關(guān)推薦HOT
        為什么Oracle收購(gòu)MySQL后仍保證其開源免費(fèi)?

        一、為什么Oracle收購(gòu)MySQL后仍保證其開源免費(fèi)MySQL在收購(gòu)前一直使用GPL許可分發(fā),而GPL許可是不可撤銷的,這意味著至少被收購(gòu)之前的最后一個(gè)Re...詳情>>

        2023-10-12 22:52:49
        為什么MySQL對(duì)SQL標(biāo)準(zhǔn)中很多基本用法都不支持?

        一、為什么MySQL對(duì)SQL標(biāo)準(zhǔn)中很多基本用法都不支持因?yàn)楫?dāng)年,在微軟.net技術(shù)棧下開發(fā)應(yīng)用,用的就是sql server數(shù)據(jù)庫(kù)。在特性方面,不僅緊跟sql...詳情>>

        2023-10-12 22:49:20
        數(shù)據(jù)庫(kù)與Microsoft Excel有什么區(qū)別?

        一、數(shù)據(jù)庫(kù)與Microsoft Excel的區(qū)別1、結(jié)構(gòu)不同excel即是電子數(shù)據(jù)表,顯示由一系列行與列構(gòu)成的網(wǎng)格。。其中的單元格可以用于存放數(shù)值、計(jì)算式...詳情>>

        2023-10-12 22:47:09
        web頁(yè)面安全是什么?

        一、web頁(yè)面安全是什么Web頁(yè)面安全指的是保護(hù)Web應(yīng)用程序和用戶數(shù)據(jù)免受惡意攻擊和不當(dāng)使用的一系列措施。它旨在確保Web頁(yè)面的機(jī)密性、完整性和...詳情>>

        2023-10-12 22:35:44
        為什么分布式數(shù)據(jù)庫(kù)這么喜歡用kv store?

        一、為什么分布式數(shù)據(jù)庫(kù)這么喜歡用kv store雖然不論是單機(jī)數(shù)據(jù)庫(kù)(MySQL、PostgreSQL等等),還是題主說(shuō)到的分布式數(shù)據(jù)庫(kù)(CockroachDB、TiDB)...詳情>>

        2023-10-12 22:21:18
        快速通道
        清水河县| 海宁市| 华蓥市| 禹城市| 儋州市| 肥西县| 曲阜市| 西林县| 丹巴县| 南和县| 阿拉尔市| 常宁市| 西和县| 茌平县| 宁化县| 元朗区| 莲花县| 新余市| 上犹县| 建宁县| 菏泽市| 大方县| 句容市| 韩城市| 宁晋县| 宁武县| 伽师县| 边坝县| 开封市| 长海县| 裕民县| 临高县| 隆昌县| 文安县| 根河市| 云林县| 晴隆县| 丁青县| 马关县| 于田县| 汉寿县|