unicode指的是一種編碼字符集,即所謂的萬國碼,而UTF-8,UTF-16(LE,BE)都只是針對這種字符集的一種編碼方式。為什麼要採用Unicode字符集呢,因為它能表示的字元幾乎包含了世界上所有的字元,這在需要國際化的應用場景中可以很方便使用,一種字符集就可以表示所有的字元。那為什麼它會有不同的編碼方式呢?Unicode字元只是定義了一個碼錶,即字元與一組數字間的對映,具體這個字元的數字如何在計算機內編碼則沒有規定,所以人們根據實際的場景需要,使用了不同的編碼字符集。UTF-8,是可變長編碼,是多位元組編碼,但它的編碼不需要透過而外的BOM(Byte Order Marker)來說明(當然,也有使用BOM的UTF-8編碼的),使用這種編碼的好處就是節省了儲存空間,但編碼效率去降低了,這就是所謂的用時間換空間。UTF-16,是定長編碼,是雙位元組編碼,所以兩個位元組儲存時哪個在前,哪個在後關係到解析出字元的結果。至於會出現BE,和LE的編碼,由於每個字元佔用了兩個位元組,在Macintosh (Mac)機和PC機上,對位元組順序的理解是不一致的,這個是歷史習慣造成的。如果一個檔案不明確說明其UTF-16使用的是BE還是LE時,那麼就需要透過BOM來指明瞭。使用這種編碼的好處就是編碼效率較高,但畢竟浪費儲存空間,這就是所謂的用空間換時間。
unicode指的是一種編碼字符集,即所謂的萬國碼,而UTF-8,UTF-16(LE,BE)都只是針對這種字符集的一種編碼方式。為什麼要採用Unicode字符集呢,因為它能表示的字元幾乎包含了世界上所有的字元,這在需要國際化的應用場景中可以很方便使用,一種字符集就可以表示所有的字元。那為什麼它會有不同的編碼方式呢?Unicode字元只是定義了一個碼錶,即字元與一組數字間的對映,具體這個字元的數字如何在計算機內編碼則沒有規定,所以人們根據實際的場景需要,使用了不同的編碼字符集。UTF-8,是可變長編碼,是多位元組編碼,但它的編碼不需要透過而外的BOM(Byte Order Marker)來說明(當然,也有使用BOM的UTF-8編碼的),使用這種編碼的好處就是節省了儲存空間,但編碼效率去降低了,這就是所謂的用時間換空間。UTF-16,是定長編碼,是雙位元組編碼,所以兩個位元組儲存時哪個在前,哪個在後關係到解析出字元的結果。至於會出現BE,和LE的編碼,由於每個字元佔用了兩個位元組,在Macintosh (Mac)機和PC機上,對位元組順序的理解是不一致的,這個是歷史習慣造成的。如果一個檔案不明確說明其UTF-16使用的是BE還是LE時,那麼就需要透過BOM來指明瞭。使用這種編碼的好處就是編碼效率較高,但畢竟浪費儲存空間,這就是所謂的用空間換時間。