0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么計(jì)算機(jī)編碼有ASCII與Unicode及UTF-8的區(qū)分

Wildesbeast ? 來源:今日頭條 ? 作者:編碼之道 ? 2020-02-15 10:20 ? 次閱讀

計(jì)算機(jī)只能處理數(shù)字,如果要處理文本,就必須先把文本轉(zhuǎn)換為數(shù)字才能處理。最早的計(jì)算機(jī)在設(shè)計(jì)時(shí)采用8個(gè)比特(bit)作為一個(gè)字節(jié)(byte),所以一個(gè)字節(jié)能表示的最大的整數(shù)就是255,如果要表示更大的整數(shù),就必須用更多的字節(jié)。比如,兩個(gè)字節(jié)可以表示的最大整數(shù)是65535,4個(gè)字節(jié)可以表示的最大整數(shù)是4294967295等。

ASCII編碼

計(jì)算機(jī)是美國人發(fā)明的,最早只有大小寫英文字母、數(shù)字和一些符號(hào)等127個(gè)字符被編碼到計(jì)算機(jī)里,這也即是我們知道的ASCII編碼(如下圖)。在ASCll編碼下,大寫字母A的編碼是65,小寫字母z的編碼是122,如下圖。

Unicode

從上文中我們知道,一個(gè)字節(jié)能表示的最大整數(shù)是255,但是《現(xiàn)代漢語常用字表》中有3500個(gè)漢字,因此,要處理中文顯然一個(gè)字節(jié)是不夠的,至少需要兩個(gè)字節(jié)。所以,中國就制定了GB2312編碼,用來把中文編進(jìn)去。

你可以想得到的是,全世界有上百種語言,日本把日文編到Shift_JIS里,韓國把韓文編到Euc-kr里,各國有各國的標(biāo)準(zhǔn),就會(huì)不可避免地出現(xiàn)沖突,結(jié)果就是在多語言混合的文本中,顯示出來會(huì)有亂碼。

鑒于此,Unicode編碼應(yīng)運(yùn)而生。Unicode的出現(xiàn)就是要把所有語言都統(tǒng)一到一套編碼里,以確保在多語言混合的文本中不會(huì)再有亂碼問題。

UTF-8

Unicode的出現(xiàn)解決了亂碼問題,但是也帶來了新問題。編碼長度是不可變的,說使用2個(gè)字節(jié)它一定會(huì)使用2個(gè)字節(jié)。這樣如果你寫的文本基本上都是英文的話,用Unicode編碼比ASCII編碼可能需要多一倍的存儲(chǔ)空間,這在存儲(chǔ)和傳輸上就十分不劃算。

所以本著節(jié)約的精神,科學(xué)家們有創(chuàng)造出了“可變長編碼”的UTF-8編碼。UTF-8編碼根據(jù)不同的數(shù)字大小把一個(gè)Unicode字符編碼成1-6個(gè)字節(jié),比如,常用的英文字母被編碼成1個(gè)字節(jié),漢字通常是3個(gè)字節(jié),只有很生僻的字符才會(huì)被編碼成4-6個(gè)字節(jié)。如果你要傳輸?shù)奈谋景罅坑⑽淖址肬TF-8編碼就能節(jié)省空間。

字符編碼的工作方式

1、在計(jì)算機(jī)內(nèi)存中,統(tǒng)一使用Unicode編碼,當(dāng)需要保存到硬盤或者需要傳輸?shù)臅r(shí)候,就轉(zhuǎn)換為UTF-8編碼。

2、用記事本編輯的時(shí)候,從文件讀取的UTF-8字符將被轉(zhuǎn)換為Unicode字符到內(nèi)存里,編輯完成后,保存的時(shí)候再把Unicode轉(zhuǎn)換為UTF-8保存到文件:

3、瀏覽網(wǎng)頁的時(shí)候,服務(wù)器會(huì)先把動(dòng)態(tài)生成的Unicode內(nèi)容轉(zhuǎn)換為UTF-8,然后再傳輸?shù)綖g覽器

所以,你看到很多網(wǎng)頁的源碼上會(huì)有類似信息,這就表示該網(wǎng)頁正是用的UTF-8編碼。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7525

    瀏覽量

    88328
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9256

    瀏覽量

    85762
  • ASCII
    +關(guān)注

    關(guān)注

    5

    文章

    172

    瀏覽量

    35142
收藏 人收藏

    評論

    相關(guān)推薦

    單片機(jī)也可以輕松玩轉(zhuǎn)UTF-8碼和TTF字體了

    要讓智能設(shè)備支持各國不同的文字,首先得有支持全球文字的編碼集,時(shí)下最出名的要數(shù)UTF-8碼了。
    的頭像 發(fā)表于 11-23 17:18 ?4863次閱讀
    單片機(jī)也可以輕松玩轉(zhuǎn)<b class='flag-5'>UTF-8</b>碼和TTF字體了

    怎么在MDB中將編碼設(shè)置為UTF-8

    是否一種方法將編碼設(shè)置為MDB中的UTF-8。我在Ubuntu/PIC18/XC8編譯器上運(yùn)行我的測試代碼,預(yù)處理失敗了,在UTF-8中使
    發(fā)表于 10-25 16:51

    如何將文件編碼更改為UTF-8

    HII正在對我的項(xiàng)目本地化,需要使用UTF-8編碼的字符串。我一切工作代碼,但在編輯器中,字符串顯示,如果編碼的ANSI拉丁代碼頁。我了解到,在開始新項(xiàng)目時(shí)可以選擇
    發(fā)表于 07-03 10:30

    Unicode、UTF-8 和 ISO8859-1到底什么區(qū)別

    Unicode、UTF-8 和 ISO8859-1到底什么區(qū)別1.本文主要包括以下幾個(gè)方面:編碼基本知識(shí),java,系統(tǒng)軟件,url,工具軟件等。 在下面的描述中,將以"中文&quo
    發(fā)表于 07-16 06:05

    VC++ 怎么改變文件的編碼UTF-8

    da哥們,問一下:VC++ 怎么改變文件的編碼UTF-8?謝謝。
    發(fā)表于 07-27 07:46

    如何將UTF-8轉(zhuǎn)換為GBK編碼

    概述我們在單片機(jī)開發(fā)中常會(huì)遇到需要將UTF-8轉(zhuǎn)換為GBK編碼的需求。在我們了解各種編碼格式的情況下可知,UFT-8不能直接轉(zhuǎn)成GBK,需中轉(zhuǎn)成un
    發(fā)表于 12-09 07:39

    RT-Thread Studio的GBK編碼版本如何改為UTF-8

    2.2.1工作區(qū)顯示 GBK 編碼,如何改為 UTF-8 呢?操作【窗口】–> 【首選項(xiàng)】在【搜索框】中,可以輸入【編碼】,這樣,找到 【常規(guī)】–> 【工作空間】【文本文件編碼】,改
    發(fā)表于 05-20 10:05

    請問如何在TouchGFX的TextArea通配符中顯示UTF-8文本?

    是“UTF-8”,所以這是文件編碼。我嘗試使用 UART 作為調(diào)試控制臺(tái),它可以毫無問題地輸出 UTF-8 文本。我猜 TouchGFX 的 Unicode 函數(shù)不希望 char* 字
    發(fā)表于 12-09 06:11

    UNICODE,GBK,UTF-8區(qū)別

    Unicode編碼,簡要解釋UCS、UTF、BMP、BOM等名詞。這是一篇程序員寫給程序員的趣味讀物
    發(fā)表于 03-28 10:28 ?2438次閱讀

    asciiutf8的區(qū)別_ASCII編碼UTF-8的關(guān)系

    UTF-8是一種針對Unicode的可變長度字符編碼,又稱萬國碼。由Ken Thompson于1992年創(chuàng)建?,F(xiàn)在已經(jīng)標(biāo)準(zhǔn)化為RFC 3629。UTF-8用1到6個(gè)字節(jié)
    的頭像 發(fā)表于 01-30 13:34 ?3w次閱讀
    <b class='flag-5'>ascii</b>和<b class='flag-5'>utf8</b>的區(qū)別_<b class='flag-5'>ASCII</b><b class='flag-5'>編碼</b>與<b class='flag-5'>UTF-8</b>的關(guān)系

    ASCII碼-&gt;Unicode-&gt; UTF-8歷史變遷,及其差異

    ASCII碼->Unicode->UTF-8歷史變遷,及其差異
    的頭像 發(fā)表于 02-27 15:56 ?2583次閱讀

    unicode如何轉(zhuǎn)GBK字庫制作

    U+0000 到 U+007F(ASCII)被編碼為字節(jié) 0×00 到 0x7F(ASCIⅡ兼容)。這意味著只包含 7 位 ASCIl 字符的文件在 ASCIⅡ和 UTF-8 兩種編碼
    發(fā)表于 08-14 10:45 ?14次下載

    單片機(jī)中UTF-8如何轉(zhuǎn)換得到GBK編碼

    概述 我們在單片機(jī)開發(fā)中常會(huì)遇到需要將UTF-8轉(zhuǎn)換為GBK編碼的需求。在我們了解各種編碼格式的情況下可知,UFT-8不能直接轉(zhuǎn)成GBK,需中轉(zhuǎn)成
    發(fā)表于 11-26 10:51 ?19次下載
    單片機(jī)中<b class='flag-5'>UTF-8</b>如何轉(zhuǎn)換得到GBK<b class='flag-5'>編碼</b>

    "stm32單片機(jī)平臺(tái)上ASCII(GBK,GB2312)轉(zhuǎn)unicode轉(zhuǎn)UTF-8"

    ASCII(GBKGB2312)?,F(xiàn)在升級(jí)STM32單片機(jī)程序,發(fā)現(xiàn)需要UTF-8編碼,APP和服務(wù)器最好不動(dòng),不然修改太大。所以就出現(xiàn)了ASCII(GBKGB2312)轉(zhuǎn)
    發(fā)表于 11-30 15:06 ?47次下載
    "stm32單片機(jī)平臺(tái)上<b class='flag-5'>ASCII</b>(GBK,GB2312)轉(zhuǎn)<b class='flag-5'>unicode</b>轉(zhuǎn)<b class='flag-5'>UTF-8</b>"

    為什么不建議在MySQL中使用UTF-8?

    Unicode 字符集包含了上百萬個(gè)字符。最簡單的編碼UTF-32,每個(gè)字符使用 32 位。這樣做最簡單,因?yàn)橐恢币詠恚?b class='flag-5'>計(jì)算機(jī)將 32 位視為數(shù)字,而
    的頭像 發(fā)表于 03-13 10:37 ?671次閱讀