3 回答

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
大多數(shù)編輯器實(shí)際上都支持另存為“ Unicode”編碼。
這是Windows不幸的錯(cuò)誤命名。
因?yàn)閃indows內(nèi)部使用UTF-16LE編碼作為Unicode字符串的內(nèi)存存儲(chǔ)格式,所以它認(rèn)為這是Unicode文本的自然編碼。在Windows世界中,存在ANSI字符串(當(dāng)前計(jì)算機(jī)上的系統(tǒng)代碼頁(yè),受完全不可移植性的影響)和Unicode字符串(內(nèi)部存儲(chǔ)為UTF-16LE)。
所有這些都是在Unicode的早期設(shè)計(jì)的,當(dāng)時(shí)我們才意識(shí)到UCS-2還遠(yuǎn)遠(yuǎn)不夠,而UTF-8才被發(fā)明出來(lái)。這就是Windows對(duì)UTF-8的全面支持差的原因。
這種誤導(dǎo)的命名方案成為用戶界面的一部分。使用Windows的編碼支持來(lái)提供多種編碼的文本編輯器會(huì)自動(dòng)并不合適地將UTF-16LE描述為“ Unicode”,而將UTF-16BE(如果提供)描述為“ Unicode big-endian”。
(其他自己進(jìn)行編碼的編輯器,例如Notepad ++,則沒(méi)有此問(wèn)題。)
如果讓您感覺(jué)更好,“ ANSI”字符串也不基于任何ANSI標(biāo)準(zhǔn)。

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊
正如拉斯穆斯(Rasmus)在他的文章“ UTF-8和Unicode之間的區(qū)別?”中所述。(鏈接已固定):
如果被問(wèn)到“ UTF-8和Unicode有什么區(qū)別?”的問(wèn)題,您會(huì)自信而簡(jiǎn)短地回答嗎?在當(dāng)今國(guó)際化的今天,所有開(kāi)發(fā)人員都應(yīng)該能夠做到這一點(diǎn)。我懷疑我們中的許多人不應(yīng)該理解這些概念。如果您覺(jué)得自己屬于這個(gè)類別,則應(yīng)該閱讀有關(guān)字符集和編碼的簡(jiǎn)短介紹。
實(shí)際上,比較UTF-8和Unicode就像比較蘋(píng)果和橘子:
UTF-8是一種編碼-Unicode是一個(gè)字符集
字符集是具有唯一數(shù)字的字符列表(有時(shí)將這些數(shù)字稱為“代碼點(diǎn)”)。例如,在Unicode字符集中,A的數(shù)字為41。
另一方面,編碼是一種將數(shù)字列表轉(zhuǎn)換為二進(jìn)制以便可以存儲(chǔ)在磁盤(pán)上的算法。例如,UTF-8將像這樣轉(zhuǎn)換數(shù)字序列1、2、3、4:
00000001 00000010 00000011 00000100現(xiàn)在,我們的數(shù)據(jù)已轉(zhuǎn)換為二進(jìn)制,現(xiàn)在可以保存到磁盤(pán)。
現(xiàn)在都在一起了
假設(shè)應(yīng)用程序從磁盤(pán)讀取以下內(nèi)容:
1101000 1100101 1101100 1101100 1101111應(yīng)用程序知道此數(shù)據(jù)代表使用UTF-8編碼的Unicode字符串,并且必須向用戶顯示為文本。第一步是將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為數(shù)字。該應(yīng)用程序使用UTF-8算法對(duì)數(shù)據(jù)進(jìn)行解碼。在這種情況下,解碼器返回以下內(nèi)容:
104 101 108 108 111由于應(yīng)用程序知道這是Unicode字符串,因此可以假定每個(gè)數(shù)字代表一個(gè)字符。我們使用Unicode字符集將每個(gè)數(shù)字轉(zhuǎn)換為相應(yīng)的字符。結(jié)果字符串為“ hello”。
結(jié)論
因此,當(dāng)有人問(wèn)您“ UTF-8和Unicode有什么區(qū)別?”時(shí),您現(xiàn)在可以放心地回答簡(jiǎn)短而精確的問(wèn)題:
無(wú)法比較UTF-8(Unicode轉(zhuǎn)換格式)和Unicode。UTF-8是一種用于將數(shù)字轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)的編碼。Unicode是用于將字符轉(zhuǎn)換為數(shù)字的字符集。
添加回答
舉報(bào)