ASCII(American
Standard Code for Information Interchange)
?
美國信息交換標(biāo)準(zhǔn)代碼,這是計(jì)算機(jī)上最早使用的通用的編碼方案。那個(gè)時(shí)候計(jì)算機(jī)還只是拉丁文字的專利,根本沒有想到現(xiàn)在計(jì)算機(jī)的發(fā)展勢(shì)頭,如果想到了,可能一開始就會(huì)使用
unicode
了。當(dāng)時(shí)絕大部分專家都認(rèn)為,要用計(jì)算機(jī),必須熟練掌握英文。這種編碼占用
7
個(gè)
Bit
,在計(jì)算機(jī)中占用一個(gè)字節(jié),
8
位,最高位沒用,通訊的時(shí)候有時(shí)用作奇偶校驗(yàn)位。因此
ASCII
編碼的取值范圍實(shí)際上是:
0x00-0x7f,
只能表示
128
個(gè)字符。后來發(fā)現(xiàn)
128
個(gè)不太夠用,做了擴(kuò)展,叫做
ASCII
擴(kuò)展編碼,用足八位,取值范圍變成:
0x00-0xff,
能表示
256
個(gè)字符。其實(shí)這種擴(kuò)展意義不大,因?yàn)?/span>
256
個(gè)字符表示一些非拉丁文字遠(yuǎn)遠(yuǎn)不夠,但是表示拉丁文字,又用不完。所以擴(kuò)展的意義還是為了下面的
ANSI
編碼服務(wù)。
ANSI
(
American
National Standard Institite
)
美國國家標(biāo)準(zhǔn)協(xié)會(huì),也就是說,每個(gè)國家(非拉丁語系國家)自己制定自己的文字的編碼規(guī)則,并得到了
ANSI
認(rèn)可,符合
ANSI
的標(biāo)準(zhǔn),全世界在表示對(duì)應(yīng)國家文字的時(shí)候都通用這種編碼就叫
ANSI
編碼。換句話說,中國的
ANSI
編碼和在日本的
ANSI
的意思是不一樣的,因?yàn)槎即碜约簢业奈淖志幋a標(biāo)準(zhǔn)。比如中國的
ANSI
對(duì)應(yīng)就是
GB2312
標(biāo)準(zhǔn),日本就是
JIT
標(biāo)準(zhǔn),香港,臺(tái)灣對(duì)應(yīng)的是
BIG5
標(biāo)準(zhǔn)等等。當(dāng)然這個(gè)問題也比較復(fù)雜,微軟從
95
開始,用就是自己搞的一個(gè)標(biāo)準(zhǔn)
GBK
。
GB2312
里面只有
6763
個(gè)漢字,
682
個(gè)符號(hào),所以確實(shí)有時(shí)候不是很夠用。
GBK
一直能和
GB2312
相互混淆并且相安無事的一個(gè)重要原因是
GBK
全面兼容
GB2312
,所以沒有出現(xiàn)任何沖突,你用
GB2312
編碼的文件通過
GBK
去解釋一定能獲得相同的顯示效果,換句話說:
GBK
對(duì)
GB2312
就是,你有的,我也有,你沒得的,我還有!
?
好了,
ANSI
的標(biāo)準(zhǔn)是什么呢,首先是
ASCII
的代碼你不能用!也就是說
ASCII
碼在任何
ANSI
中應(yīng)該都是相同的。其他的,你們自己擴(kuò)展。所以呢,中國人就把
ASCII
碼變成
8
位,
0x7f
之前我不動(dòng)你的,我從
0xa0
開始編,
0xa0
到
0xff
才
95
個(gè)碼位,對(duì)于中國字那簡直是杯水車薪,因此,就用兩個(gè)字節(jié)吧,因此編碼范圍就從
0xA1A1 - 0xFEFE
,這個(gè)范圍可以表示
23901
個(gè)漢字。基本夠用了吧,
GB2312
才
7000
多個(gè)呢!
GBK
更猛,編碼范圍是從
0x8140
- 0xFEFE,
可以表示
3
萬多個(gè)漢字。可以看出,這兩種方案,都能保證漢字頭一個(gè)字節(jié)在
0x7f
以上,從而和
ASCII
不會(huì)發(fā)生沖突。能夠?qū)崿F(xiàn)英文和漢字同時(shí)顯示。
BIG5
,香港和臺(tái)灣用的比較多,繁體,范圍:
0xA140 - 0xF9FE, 0xA1A1 - 0xF9FE
,每個(gè)字由兩個(gè)字節(jié)組成,其第一
字節(jié)編碼范圍為
0xA1~0xF9
,第二字節(jié)編碼范圍為
0x40-0x7E
與
0xA1-0xFE
,總計(jì)收入
13868
個(gè)字
(
包括
5401
個(gè)常用字、
7652
個(gè)次常用字、
7
個(gè)擴(kuò)充字、以及
808
個(gè)各式符號(hào)
)
。
?
那么到底
ANSI
是多少位呢?這個(gè)不一定!比如在
GB2312
和
GBK
,
BIG5
中,是兩位!但是其他標(biāo)準(zhǔn)或者其他語言如果不夠用,就完全可能不止兩位!
例如:
GB18030:
GB18030-2000(GBK2K)
在
GBK
的基礎(chǔ)上進(jìn)一步擴(kuò)展了漢字,增加了藏、蒙等少數(shù)民族的字形。
GBK2K
從根本上解決了字位不夠,字形不足的問題。它有幾個(gè)特點(diǎn):它并沒有確定所有的字形,只是規(guī)定了編碼范圍,留待以后擴(kuò)充。編碼是變長的,其二字節(jié)部分與
GBK
兼容;四字節(jié)部分是擴(kuò)充的字形、字位,其編碼范圍是首字節(jié)
0x81-0xfe
、二字節(jié)
0x30-0x39
、三字節(jié)
0x81-0xfe
、四字節(jié)
0x30-0x39
。它的推廣是分階段的,首先要求實(shí)現(xiàn)的是能夠完全映射到
Unicode3.0
標(biāo)準(zhǔn)的所有字形。它是國家標(biāo)準(zhǔn),是強(qiáng)制性的。
搞懂了
ANSI
的含義,我們發(fā)現(xiàn)
ANSI
有個(gè)致命的缺陷,就是每個(gè)標(biāo)準(zhǔn)是各自為陣的,不保證能兼容。換句話說,要同時(shí)顯示中文和日本文或者阿拉伯文,就完全可能會(huì)出現(xiàn)一個(gè)編碼兩個(gè)字符集里面都有對(duì)應(yīng),不知道該顯示哪一個(gè)的問題,也就是編碼重疊的問題。顯然這樣的方案不好,所以
Unicode
才會(huì)出現(xiàn)!
3.MBCS
(
Multi-Byte
Chactacter System
(
Set)
)
?
多字節(jié)字符系統(tǒng)或者字符集,基于
ANSI
編碼的原理上,對(duì)一個(gè)字符的表示實(shí)際上無法確定他需要占用幾個(gè)字節(jié)的,只能從編碼本身來區(qū)分和解釋。因此計(jì)算機(jī)在存儲(chǔ)的時(shí)候,就是采用多字節(jié)存儲(chǔ)的形式。也就是你需要幾個(gè)字節(jié)我給你放幾個(gè)字節(jié),比如
A
我給你放一個(gè)字節(jié),比如
"
中
“
,我就給你放兩個(gè)字節(jié),這樣的字符表示形式就是
MBCS
。
在基于
GBK
的
windows
中,不會(huì)超過
2
個(gè)字節(jié),所以
windows
這種表示形式有叫做
DBCS
(
Double-Byte
Chactacter System
),其實(shí)算是
MBCS
的一個(gè)特例。
C
語言默認(rèn)存放字符串就是用的
MBCS
格式。從原理上來說,這樣是非常經(jīng)濟(jì)的一種方式。
4.CodePage
代碼頁,最早來自
IBM
,后來被微軟,
oracle
,SAP
等廣泛采用。因?yàn)?/span>
ANSI
編碼每個(gè)國家都不統(tǒng)一,不兼容,可能導(dǎo)致沖突,所以一個(gè)系統(tǒng)在處理文字的時(shí)候,必須要告訴計(jì)算機(jī)你的
ANSI
是哪個(gè)國家和地區(qū)的標(biāo)準(zhǔn),這種國家和標(biāo)準(zhǔn)的代號(hào)(其實(shí)就是字符編碼格式的代號(hào)),微軟稱為
Codepage
代碼頁,其實(shí)這個(gè)代碼頁和字符集編碼的意思是一樣的。告訴你代碼頁,本質(zhì)就是告訴了你編碼格式。但是不同廠家的代碼頁可能是完全不同,哪怕是同樣的編碼,比如,
UTF-8
字符編碼
在
IBM
對(duì)應(yīng)的代碼頁是
1208
,在微軟對(duì)應(yīng)的是
65001,
在德國的
SAP
公司對(duì)應(yīng)的是
4110
。所以啊,其實(shí)本來就是一個(gè)東西,大家各自為政,搞那么多新名詞,實(shí)在沒必要!所以標(biāo)準(zhǔn)還是很重要的!!!
比如
GBK
的在微軟的代碼頁是
936
,告訴你代碼頁是
936
其實(shí)和告訴你我編碼格式是
GBK
效果完全相同。那么處理文本的時(shí)候就不會(huì)有問題,不會(huì)去考慮某個(gè)代碼是顯示的韓文還是中文,同樣,日文和韓文的代碼頁就和中文不同,這樣就可以
避免編碼沖突導(dǎo)致計(jì)算機(jī)不知如何處理的問題。當(dāng)然用這個(gè)也可以很容易的切換語言版本。
但是這都是治標(biāo)不治本的方法,還是無法解決同時(shí)顯示多種語言的問題,所以最后還是都用
unicode
吧,永遠(yuǎn)不會(huì)有沖突了。
5.Unicode(Universal
Code)
?
這是一個(gè)編碼方案,說白了就是一張包含全世界所有文字的一個(gè)編碼表,不管你用的上,用不上,不管是現(xiàn)在用的,還是以前用過的,只要這個(gè)世界上存在的文字符號(hào),統(tǒng)統(tǒng)給你一個(gè)唯一的編碼,這樣就不可能有任何沖突了。不管你要同時(shí)顯示任何文字,都沒有問題。
?
因此在這樣的方案下,
Unicode
出現(xiàn)了。
Unicode
編碼范圍是:
0-0x10FFFF
,可以容納
1114112
個(gè)字符,
100
多萬啊。全世界的字符根本用不完了,
Unicode 5.0
版本中,才用了
238605
個(gè)碼位。所以足夠了。
因此從碼位范圍看,嚴(yán)格的
unicode
需要
3
個(gè)字節(jié)來存儲(chǔ)。但是考慮到理解性和計(jì)算機(jī)處理的方便性,理論上還是用
4
個(gè)字節(jié)來描述。
Unicode
采用的漢字相關(guān)編碼用的是《
CJK
統(tǒng)一漢字編碼字符集》
—
國家標(biāo)準(zhǔn)
GB13000.1
是完全等同于國際標(biāo)準(zhǔn)《通用多八位編碼字符集
(UCS)
》
ISO 10646.1
。《
GB13000.1
》中最重要的也經(jīng)常被采用的是其雙字節(jié)形式的基本多文種平面。在這
65536
個(gè)碼位的空間中,定義了幾乎所有國家或地區(qū)的語言文字和符號(hào)。其中從
0x4E00
到
0x9FA5
的連續(xù)區(qū)域包含了
20902
個(gè)來自中國(包括臺(tái)灣)、日本、韓國的漢字,稱為
CJK (Chinese Japanese Korean)
漢字。
CJK
是《
GB2312-80
》、《
BIG5
》等字符集的超集。
CJK
包含了中國,日本,韓國,越南,香港,也就是
CJKVH
。這個(gè)在
UNICODE
的
Charset chart
中可以明顯看到。
unicode
的相關(guān)標(biāo)準(zhǔn)可以從
unicode.org
上面獲得,目前已經(jīng)進(jìn)行到了
6.0
版本。
下面這段描述來自百度百科:
Unicode
字符集可以簡寫為
UCS
(
Unicode Character Set
)。早期的
? unicodeUnicode
標(biāo)準(zhǔn)有
UCS-2
、
UCS-4
的說法。
UCS-2
用兩個(gè)字節(jié)編碼,
UCS-4
用
4
個(gè)字節(jié)編碼。
UCS-4
根據(jù)最高位為
0
的最高字節(jié)分成
2^7=128
個(gè)
group
。每個(gè)
group
再根據(jù)次高字節(jié)分為
256
個(gè)平面(
plane
)。每個(gè)平面根據(jù)第
3
個(gè)字節(jié)分為
256
行
(
row
),每行有
256
個(gè)碼位(
cell
)。
group 0
的平面
0
被稱作
BMP
(
Basic Multilingual Plane
)。將
UCS-4
的
BMP
去掉前面的兩個(gè)零字節(jié)就得到了
UCS-2
。每個(gè)平面有
2^16=65536
個(gè)碼位。
Unicode
計(jì)劃使用了
17
個(gè)平面,一共有
17*65536=1114112
個(gè)碼位。在
Unicode 5.0.0
版本中,已定義的碼位只有
238605
個(gè),分布在平面
0
、平面
1
、平面
2
、平面
14
、平面
15
、平面
16
。其中平面
15
和平面
16
上只是定義了兩個(gè)各占
65534
個(gè)碼位的專用區(qū)(
Private Use Area
),分別是
0xF0000-0xFFFFD
和
0x100000-0x10FFFD
。所謂專用區(qū),就是保留給大家放自定義字符的區(qū)域,可以簡寫為
PUA
。
平面
0
也有一個(gè)專用區(qū):
0xE000-0xF8FF
,有
6400
個(gè)碼位。平面
0
的
0xD800-0xDFFF
,共
2048
個(gè)碼位,是一個(gè)被稱作代理區(qū)(
Surrogate
)的特殊區(qū)域。代理區(qū)的目的用兩個(gè)
UTF-16
字符表示
BMP
以外的字符。在介紹
UTF-16
編碼時(shí)會(huì)介紹。如前所述在
Unicode 5.0.0
版本中,
238605-65534*2-6400-2408=99089
。余下的
99089
個(gè)已定義碼位分布在平面
0
、平面
1
、平面
2
和平面
14
上,它們對(duì)應(yīng)著
Unicode
目前定義的
99089
個(gè)字符,其中包括
71226
個(gè)漢字。平面
0
、平面
1
、平面
2
和平面
14
上分別定義了
52080
、
3419
、
43253
和
337
個(gè)字符。平面
2
的
43253
個(gè)字符都是漢字。平面
0
上定義了
27973
個(gè)漢字。
?
6.Unicode
的實(shí)現(xiàn)方案
Unicode
其實(shí)只是一張巨大的編碼表。要在計(jì)算機(jī)里面實(shí)現(xiàn),也出現(xiàn)了幾種不同的方案。也就是說如何表示
unicode
編碼的問題。
UTF-8
(
UCS
Transformation Format 8bit)
這個(gè)方案的意思以
8
位為單位來標(biāo)識(shí)文字,注意并不是說一個(gè)文字用
8
位標(biāo)識(shí)。他其實(shí)是一種
MBCS
方案,可變字節(jié)的。到底需要幾個(gè)字節(jié)表示一個(gè)符號(hào),這個(gè)要根據(jù)這個(gè)符號(hào)的
unicode
編碼來決定,最多
4
個(gè)字節(jié)。
編碼規(guī)則如下:
Unicode
編碼
(16
進(jìn)制
)
║
UTF-8
字節(jié)流
(
二進(jìn)制
)
000000 - 00007F
║
0xxxxxxx
000080 - 0007FF
║
110xxxxx 10xxxxxx
000800 - 00FFFF
║
1110xxxx 10xxxxxx
10xxxxxx
010000 - 10FFFF
║
11110xxx 10xxxxxx
10xxxxxx 10xxxxxx
UTF-8
的特點(diǎn)是對(duì)不同范圍的字符使用不同長度的編碼。對(duì)于
0x00-0x7F
之間的字符,
UTF-8
編碼與
ASCII
編碼完全相同。
UTF-8
編碼的最大長度是
4
個(gè)字節(jié)。從上表可以看出,
4
字節(jié)模板有
21
個(gè)
x
,即可以容納
21
位二進(jìn)制數(shù)字。
Unicode
的最大碼位
0x10FFFF
也只有
21
位。
例
1
:
“
漢
”
字的
Unicode
編碼是
0x6C49
。
0x6C49
在
0x0800-0xFFFF
之間,使用用
3
字節(jié)模板了:
1110xxxx
10xxxxxx 10xxxxxx
。將
0x6C49
寫成二進(jìn)制是:
0110 1100 0100 1001
,
用這個(gè)比特流依次代替模板中的
x
,得到:
11100110 10110001 10001001
,即
E6 B1 89
。
例
2
:
Unicode
編碼
0x20C30
在
0x010000-0x10FFFF
之間,使用用
4
字節(jié)模板了:
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
。
將
0x20C30
寫成
21
位二進(jìn)制數(shù)字(不足
21
位就在前面補(bǔ)
0
):
0 0010 0000
1100 0011 0000
,用這個(gè)比特流依次代替模板中的
x
,得到:
11110000 10100000 10110000 10110000
,即
F0 A0 B0 B0
。
(
2
)
UTF-16
?UTF-16
編碼以
16
位無符號(hào)整數(shù)為單位。注意是
16
位為一個(gè)單位,不表示一個(gè)字符就只有
16
位。現(xiàn)在機(jī)器上的
unicode
編碼一般指的就是
UTF-16
。絕大部分
2
個(gè)字節(jié)就夠了,但是不能絕對(duì)的說所有字符都是
2
個(gè)字節(jié)。這個(gè)要看字符的
unicode
編碼處于什么范圍而定,有可能是
2
個(gè)字節(jié),也可能是
4
個(gè)字節(jié)。這點(diǎn)請(qǐng)注意!
下面算法解釋來自百度百科。
我們把
Unicode?
unicode
編碼記作
U
。編碼規(guī)則如下:
如果
U<0x10000
,
U
的
UTF-16
編碼就是
U
對(duì)應(yīng)的
16
位無符號(hào)整數(shù)(為書寫簡便,下文將
16
位無符號(hào)整數(shù)記作
WORD
)。
如果
U≥0x10000
,我們先計(jì)算
U'=U-0x10000
,然后將
U'
寫成二進(jìn)制形式:
yyyy
yyyy yyxx xxxx xxxx
,
U
的
UTF-16
編碼(二進(jìn)制)就是:
110110yyyyyyyyyy 110111xxxxxxxxxx
。為什么
U'
可以被寫成
20
個(gè)二進(jìn)制位?
Unicode
的最大碼位是
0x10ffff
,減去
0x10000
后,
U'
的最大值是
0xfffff
,所以肯定可以用
20
個(gè)二進(jìn)制位表示。
???
例如:
Unicode
編碼
0x20C30
,減去
0x10000
后,得到
0x10C30
,寫成二進(jìn)制是:
0001 0000 1100 0011 0000
。用前
10
位依次替代模板中的
y
,用后
10
位依次替代模板中的
x
,就得到:
1101100001000011
1101110000110000
,即
0xD843
0xDC30
。
???
按照上述規(guī)則,
Unicode
編碼
0x10000-0x10FFFF
的
UTF-16
編碼有兩個(gè)
WORD
,第一個(gè)
WORD
的高
6
位是
110110
,第二個(gè)
WORD
的高
6
位是
110111
。可見,第一個(gè)
WORD
的取值范圍(二進(jìn)制)是
11011000 00000000
到
11011011 11111111
,即
0xD800-0xDBFF
。第二個(gè)
WORD
的取值范圍(二進(jìn)制)是
11011100 00000000
到
11011111 11111111
,即
0xDC00-0xDFFF
。
為了將一個(gè)
WORD
的
UTF-16
編碼與兩個(gè)
WORD
的
UTF-16
編碼區(qū)分開來,
Unicode
編碼的設(shè)計(jì)者將
0xD800-0xDFFF
保留下來,并稱為代理區(qū)(
Surrogate
):
D800
-
DB7F
║
High Surrogates
║
高位替代
DB80
-
DBFF
║
High Private Use
Surrogates
║
高位專用替代
DC00
-
DFFF
║
Low Surrogates
║
低位替代
??
高位替代就是指這個(gè)范圍的碼位是兩個(gè)
WORD
的
UTF-16
編碼的第一個(gè)
WORD
。低位替代就是指這個(gè)范圍的碼位是兩個(gè)
WORD
的
UTF-16
編碼的第二個(gè)
WORD
。那么,高位專用替代是什么意思?我們來解答這個(gè)問題,順便看看怎么由
UTF-16
編碼推導(dǎo)
Unicode
編碼。
?
如果一個(gè)字符的
UTF-16
編碼的第一個(gè)
WORD
在
0xDB80
到
0xDBFF
之間,那么它的
Unicode
編碼在什么范圍內(nèi)?我們知道第二個(gè)
WORD
的取值范圍是
0xDC00-0xDFFF
,所以這個(gè)字符的
UTF-16
編碼范圍應(yīng)該是
0xDB80 0xDC00
到
0xDBFF 0xDFFF
。我們將這個(gè)范圍寫成二進(jìn)制:
1101101110000000 11011100 00000000 - 1101101111111111
1101111111111111
按
照編碼的相反步驟,取出高低
WORD
的后
10
位,并拼在一起,得到
1110 0000
0000 0000 0000 - 1111 1111 1111 1111 1111?
即
0xe0000-0xfffff
,按照編碼的相反步驟再加上
0x10000
,得到
0xf0000-0x10ffff
。這就是
UTF-16
編碼的第一個(gè)
WORD
在
0xdb80
到
0xdbff
之間的
Unicode
編碼范圍,即平面
15
和平面
16
。因?yàn)?/span>
Unicode
標(biāo)準(zhǔn)將平面
15
和平面
16
都作為專用區(qū),所以
0xDB80
到
0xDBFF
之間的保留碼位被稱作高位專用替代。
(
3
)
UTF-32
?
這個(gè)就簡單了,和
Unicode
碼表基本一一對(duì)應(yīng),固定四個(gè)字節(jié)。
?
為什么不采用
UTF-32
呢,因?yàn)?/span>
unicode
定義的范圍太大了,其實(shí)
99%
的人使用的字符編碼不會(huì)超過
2
個(gè)字節(jié),所以如同統(tǒng)一用
4
個(gè)字節(jié),簡單倒是簡單了,但是數(shù)據(jù)冗余確實(shí)太大了,不好,所以
16
位是最好的。就算遇到超過
16
位能表示的字符,我們也可以通過上面講到的代理技術(shù),采用
32
位標(biāo)識(shí),這樣的方案是最好的。所以現(xiàn)在絕大部分機(jī)器實(shí)現(xiàn)
unicode
還是采用的
utf-16
的方案。當(dāng)然也有
UTF-8
的方案。比如
windows
用的就是
UTF16
方案,不少
linux
用的就是
utf8
方案。
7.
編碼存儲(chǔ)差異
這里就要引出兩個(gè)名詞:
LE
(
little endian):
小字節(jié)字節(jié)序,意思就是一個(gè)單元在計(jì)算機(jī)中的存放時(shí)按照低位在前(低地址),高位在后(高地址)的模式存放。
BE
(
big endian):
大字節(jié)字節(jié)序,和
LE
相反,是高位在前,低位在后。
比如一個(gè)
unicode
編碼為:
0x006C49
,如果是
LE
,那么在文件中的存放順序應(yīng)該是:
49 6c 00
如果是
BE ,
那么順序應(yīng)該是:
00 6c 49
8.
編碼格式的檢測(cè)
到底采用什么編碼,如果能檢測(cè)就好了。專家們也是這么想的,所以專家給每種格式和字節(jié)序規(guī)定了一些特殊的編碼,
這些編碼在
unicode
中是沒有使用的,所以不用擔(dān)心會(huì)沖突。
這個(gè)叫做
BOM
(
Byte Order
Mark
)頭。意思是字節(jié)序標(biāo)志頭。通過它基本能確定編碼格式和字節(jié)序。
UTF
編碼
║
Byte Order Mark
UTF-8
???
║
EF BB BF
UTF-16LE
║
FF FE
UTF-16BE
║
FE FF
UTF-32LE
║
FF FE 00 00
UTF-32BE
║
?
00 00 FE FF
所以通過檢測(cè)文件前面的
BOM
頭,基本能確定編碼格式和字節(jié)序。
但是這個(gè)
BOM
頭只是建議添加,不是強(qiáng)制的,所以不少軟件和系統(tǒng)沒有添加這個(gè)
BOM
頭(所以有些軟件格式中有帶
BOM
頭和
NoBOM
頭的選擇),這個(gè)時(shí)候要檢測(cè)什么格式,就比較麻煩了當(dāng)然可以檢測(cè),但是不能保證
100%
準(zhǔn)確,只能通過編碼范圍從概率上來檢查,雖然準(zhǔn)確度還是比較高,但是不能保證
100%
。所以,時(shí)常看到檢測(cè)錯(cuò)誤的軟件,也不奇怪了。
總結(jié):
??
終于寫完了,其實(shí)這些問題都是不統(tǒng)一導(dǎo)致的,屬于歷史問題,所以才會(huì)有這些困惑,這里也呼吁所有的軟件
開發(fā)人員自覺的采用
Unicode
標(biāo)準(zhǔn)進(jìn)行文字處理,我相信在不久的將來,這些困擾都不會(huì)存在了,因?yàn)樗熊浖际?/span>
unicode d ,
只要有字庫,任何文字都能同時(shí)顯示,也可以到任何語言的平臺(tái)上的去運(yùn)行,不再有亂碼的困惑!其實(shí)現(xiàn)在絕大部分軟件已經(jīng)是這么做的了!
??
另外也不要被很多名詞屬于所迷惑,其實(shí)這些只是標(biāo)準(zhǔn)的問題,根本沒有什么新的東西,更沒有什么復(fù)雜的東西。
?
摘自
http://blog.csdn.net/softman11/archive/2011/01/08/6124345.aspx
?