日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

unicode字符编码表下载_详解字符编码(上)

發(fā)布時(shí)間:2025/3/19 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unicode字符编码表下载_详解字符编码(上) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者 | 張奎

字符編碼相關(guān)問(wèn)題是軟件開發(fā)過(guò)程中的常見問(wèn)題,本文對(duì)字符編碼的概念進(jìn)行了介紹,并針對(duì)字符編碼的常見問(wèn)題給出了解釋。

字符編碼概念


下面以一個(gè)例子來(lái)引入對(duì)字符編碼的介紹,漢字“柯”采用不同編碼格式編碼的結(jié)果如下表所示:

信息:信息是用來(lái)消除隨機(jī)不確定性的東西(香農(nóng))。符號(hào):一種有形的標(biāo)識(shí)。文字:信息的一種符號(hào)載體。字符:用以表示文字的符號(hào),比如“a”,“柯”等。字符集:所有字符的集合,比如把所有漢字放到一起,則可以稱之為“漢字字符集”。字符編碼:字符與數(shù)字的對(duì)應(yīng)關(guān)系,比如我用數(shù)字 356 對(duì)應(yīng)字符‘美’,則我們描述“美”的編碼為 356。編碼方式:字符編碼的一種方式。。

DEMO

在我的世界中只有三個(gè)字“你,我,他”,我將這三個(gè)字組成的集合稱之為“搗蛋字符集”,下面來(lái)給“搗蛋字符集”編碼,編碼可以有很多的方式:方法 1:1->‘我’,2->‘你’,3->‘他’方法 2:1->‘他’,2->‘你’,3->‘我’方法 3:1->‘你’,2->‘我’,3->‘他’并且,我給方法 1 取個(gè)名字叫“順序碼”,方法 2 叫“逆序碼”,方法 3 叫“亂序碼”。

區(qū)位碼

字符編碼方式的名字。和上面提到的“順序碼”,“逆序碼”,“亂序碼”一樣,是一種編碼方式的名字。
來(lái)由:可能是為了方便技術(shù)交流。
作用:給編碼方式命名。
可見區(qū)位碼在程序員眼中幾乎一無(wú)是處,可以忽略不計(jì)。

交換碼

用于在不同系統(tǒng)之間進(jìn)行交換的編碼。
來(lái)由:不同的系統(tǒng)之間可能使用不同的機(jī)內(nèi)碼,所以會(huì)導(dǎo)致亂碼問(wèn)題,所以定了一種在不同系統(tǒng)之間一樣的編碼。
作用:不同系統(tǒng)之間編碼的統(tǒng)一接口,解決亂碼問(wèn)題。

機(jī)內(nèi)碼

計(jì)算機(jī)內(nèi)部存儲(chǔ)使用的編碼。
來(lái)由:可能是程序員為了分層,自己系統(tǒng)內(nèi)部使用的一種編碼方式,用來(lái)屏蔽掉交換碼的變動(dòng)對(duì)系統(tǒng)的影響。
作用:計(jì)算機(jī)內(nèi)部用于將編碼映射到字符。

為了方便起見,許多系統(tǒng)的機(jī)內(nèi)碼直接使用交換碼,如 ASCII, utf8, utf16, utf32, Unicode 等,所以這些編碼的機(jī)內(nèi)碼和交換碼一樣。(GB2312 的機(jī)內(nèi)碼和交換碼不一樣)

其實(shí),現(xiàn)代常見的系統(tǒng)(Windows, Mac, Linux)都采用 Unicode 作為內(nèi)碼。

需要注意的是“內(nèi)碼”并不是操作系統(tǒng)層面的東西,只是軟件層面的東西,比如我自己寫個(gè)軟件,軟件中字符的存儲(chǔ)采用我自己的編碼,因此我自己的軟件就有了自己的內(nèi)碼。

Unicode 編碼

我們通常說(shuō)的 Unicode 編碼,比如 U+4E00 其實(shí)叫做碼位/碼點(diǎn)(Code Point),這個(gè)是一種編碼的方式,和 GB2312 的區(qū)位碼一樣。從這個(gè)意義上來(lái)講 U+4E00 不是機(jī)內(nèi)碼。只是有些機(jī)內(nèi)碼使用和碼點(diǎn)一樣的數(shù)字來(lái)存儲(chǔ) Unicode 字符。

Unicode 的碼點(diǎn)空間從 U+0000 到 U+10FFFF,共約 111 萬(wàn)個(gè)碼點(diǎn)可用來(lái)映射字符。

Unicode 的碼點(diǎn)空間被分為 17 個(gè) plane,每個(gè)平面有 0xFFFF 個(gè)碼位。

第一個(gè) Unicode 平面,碼位從 U+0000 到 U+FFFF 包含了最常用的字符,該平面被稱為“基本多語(yǔ)言平面(BMP = Basic Multilingual Plane)”。其他平面被稱為輔助(S=Supplementary)平面。見下圖:

常用中文編碼方式特點(diǎn):

GB2312 的編碼規(guī)則

GB2312 采用區(qū)位碼的方式進(jìn)行編碼的。96*96 = 共 96 個(gè)區(qū),每個(gè)區(qū)有 96 個(gè)位置。

編碼規(guī)則為:區(qū)/位碼分別加上 32(0010 0000)產(chǎn)生交換碼,用于國(guó)際交換,然后高位置1得到機(jī)內(nèi)碼,用于存儲(chǔ)。

UTF8 的編碼規(guī)則

字符編碼相關(guān)問(wèn)題


1. 有了交換碼,為什么還會(huì)有亂碼問(wèn)題?
答:因?yàn)楦鬈浖?系統(tǒng)所用的交換碼不一致。

2. Windows 記事本將文本用 Unicode 保存,為什么會(huì)在文件開頭添加“FFFE”或“FEFF”?答:為了區(qū)分 big-endian 和 little-endian 。FEFF 是 Unicode 里的一個(gè)合法字符(utf8 編碼 EFBBBF),該字符沒有寬度,也不會(huì)導(dǎo)致?lián)Q行(ZERO WIDTH NO-BREAK SPACE),而且存儲(chǔ)該字符還有一個(gè)好處,就是可以區(qū)分 big-endian 和 little-endian。因?yàn)?FFFE 不是 Unicode 的合法字符。這一做法并非是 Windows 記事本故意的,而是在 Unicode 規(guī)范中定義的。

3. 字符集和字符編碼是一一對(duì)應(yīng)的么?答:不是。如下圖:

可見,知道了字符集不一定知道編碼方式,但知道了編碼方式則也就知道了字符集。

4. utf8, utf16, utf32 有什么異同?相同點(diǎn):表示的范圍相同,都是整個(gè) Unicode 字符集范圍。異同點(diǎn):utf8 : 變長(zhǎng) 1-4 字節(jié)utf16 : 變長(zhǎng) 2 或 4 字節(jié)utf32 : 定長(zhǎng) 4 字節(jié)(gb2312 : 定長(zhǎng) 2 字節(jié))

5. UCS-2 是什么?UCS-2 是早期的 Unicode 字符集的一種編碼方式,由于當(dāng)時(shí) Unicode 字符集只有目前的第一平面,故 UCS-2 使用定長(zhǎng) 2 字節(jié)的長(zhǎng)度來(lái)編碼 Unicode 字符集。其編碼的方式和 Unicode 字符的碼位一致。

6. utf16 和 UCS-2 的異同?utf16 包含 ucs-2 的字符,只是 utf16 是動(dòng)態(tài)的編碼,在 Unicode 第一平面內(nèi),其兩者編碼結(jié)果相同。(都是以 Unicode 的碼位作為編碼)

7. 如果 Unicode 只是一個(gè)字符集的話,為什么它常常和 utf8 放在一起?比如在記事本的另存里面:

答:這是一種落后的使用方法,和 Unicode 的歷史有關(guān)。

早期的 Unicode 字符集只有一種編碼方式 UCS-2,由于只有一種所以就直接稱為“Unicode 編碼(橙色)”,所以有些程序沿用以前的叫法,把 Unicode 編碼和 utf8 放在一起,一般這種情況下的 Unicode 編碼指的就是 UTF-16。

其實(shí),記事本中的 Unicode 就是 utf16。

8. 什么是帶 BOM 的 UTF-8?BOM = Byte Order Mark , 字節(jié)碼序標(biāo)記,即字符 U+FEFF ,是 Unicode 標(biāo)準(zhǔn)定義的一種用于 表示字節(jié)碼順序 的字符。是 Unicode 標(biāo)準(zhǔn)專為 UTF16 和 UTF32 設(shè)計(jì)的(標(biāo)準(zhǔn)也允許 UTF8 使用 BOM),UTF8 由于是單字節(jié)的編碼方式,所以不存在big-endian和little-endian的問(wèn)題,所以 UTF8 其實(shí)并不需要這個(gè)東西,但微軟的記事本為了統(tǒng)一或者為了和其他編碼方式區(qū)分開,會(huì)自動(dòng)在 UTF8 前加上 BOM,這有可能導(dǎo)致在 linux,mac 等系統(tǒng)下亂碼。所以網(wǎng)頁(yè)(要跨平臺(tái))一般不要使用帶 BOM 的 UTF8。帶 BOM 的編碼,指的就是文件頭帶有 U+FEFF 字符。

Notepad++ 里的顯示:

總結(jié)


本文主要是介紹了一些字符編碼理論相關(guān)的內(nèi)容,沒有涉及到實(shí)際應(yīng)用,接下來(lái)的一篇文章將結(jié)合具體開發(fā)過(guò)程相關(guān)的字符編碼問(wèn)題進(jìn)行詳細(xì)介紹。

總結(jié)

以上是生活随笔為你收集整理的unicode字符编码表下载_详解字符编码(上)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。