計算機編碼

計算機編碼

計算機編碼指電腦內部代表字母或數字的方式.常見的編碼方式有:ASCII編碼,GB2312編碼(簡體中文),GBK,BIG5編碼(繁體中文),ANSI編碼,unicode,utf-8編碼等

基本介紹

  • 中文名:計算機編碼
  • 外文名:Computer code
  • 編碼單位:最小的單元是"位" bit
  • 進制:二進制數由0和1,八
基本信息,編碼單位,進制,上層字元,編碼分類,

基本信息

計算機編碼,指電腦內部代表字母或數字的方式。

編碼單位

最小的單元是位(bit),接著是位元組(Byte),一個位元組=8位,英語表示是1 Byte=8 bits 。機器語言的單位Byte。1 KB=1024 Byte; 1 MB=1024 KB; 1 GB=1024 MB ; 1TB=1024 GB。

進制

二進制數由0和1,八進制數由0-7, 十進制數由0-9,十六進制數由0-9,A,B,C,D,E,F組成,他們關係如下:
Binary(2)
Octal(8)
Decimal(10)
Hex(16)
0
0
0
00
1
1
1
1
10
2
2
2
11
3
3
3
100
4
4
4
101
5
5
5
110
6
6
6
111
7
7
7
1000
10
8
8
1001
11
9
9
1010
12
10
A
1011
13
11
B
1100
14
12
C
1101
15
13
D
1110
16
14
E
1111
17
15
F

上層字元

字元是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。字元集是多個字元的集合,字元集種類較多,每個字元集包含的字元個數不同,常見字元集名稱:ASCII字元集、GB2312字元集、BIG5字元集、 GB 18030字元集、Unicode字元集等。計算機要準確的處理各種字元集文字,需要進行字元編碼,以便計算機能夠識別和存儲各種文字。

編碼分類

ASCII
ASCII(American Standard Code for Information Interchange,美國信息互換標準代碼)是基於羅馬字母表的一套電腦編碼系統,它主要用於顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,並等同於國際標準ISO 646。
包含內容:
控制字元回車鍵、退格、換行鍵等。
可顯示字元:英文大小寫字元、阿拉伯數字和西文符號
ASCII擴展字元集擴展:表格符號、計算符號、希臘字母和特殊的拉丁符號。
第0~31號及第127號(共33個)是控制字元或通訊專用字元,如控制符:LF(換行)、CR(回車)、FF(換頁)、DEL(刪除)、BEL(振鈴)等;通訊專用字元:SOH(文頭)、EOT(文尾)、ACK(確認)等;
第32~126號(共94個)是字元,其中第48~57號為0~9十個阿拉伯數字;65~90號為26個大寫英文字母,97~122號為26個小寫英文字母,其餘為一些標點符號、運算符號等。注意:在計算機的存儲單元中,一個ASCII碼值占一個位元組(8個二進制位),其最高位(b7)用作奇偶校驗位。所謂奇偶校驗,是指在代碼傳送過程中用來檢驗是否出現錯誤的一種方法,一般分奇校驗和偶校驗兩種。奇校驗規定:正確的代碼一個位元組中1的個數必須是奇數,若非奇數,則在最高位b7添1;偶校驗規定:正確的代碼一個位元組中1的個數必須是偶數,若非偶數,則在最高位b7添1。
計算機編碼
八進制
十六進制
十進制
字元
八進制
十六進制
十進制
字元
0
0
0
nul
100
40
64
@
1
1
1
soh
101
41
65
A
2
2
2
stx
102
42
66
B
3
3
3
etx
103
43
67
C
4
4
4
eot
104
44
68
D
5
5
5
enq
105
45
69
E
6
6
6
ack
106
46
70
F
7
7
7
bel
107
47
71
G
10
8
8
bs
110
48
72
H
11
9
9
ht
111
49
73
I
12
0a
10
nl
112
4a
74
J
13
0b
11
vt
113
4b
75
K
14
0c
12
ff
114
4c
76
L
15
0d
13
er
115
4d
77
M
16
0e
14
so
116
4e
78
N
17
0f
15
si
117
4f
79
O
20
10
16
dle
120
50
80
P
21
11
17
dc1
121
51
81
Q
22
12
18
dc2
122
52
82
R
23
13
19
dc3
123
53
83
S
24
14
20
dc4
124
54
84
T
25
15
21
nak
125
55
85
U
26
16
22
syn
126
56
86
V
27
17
23
etb
127
57
87
W
30
18
24
can
130
58
88
X
31
19
25
em
131
59
89
Y
32
1a
26
sub
132
5a
90
Z
33
1b
27
esc
133
5b
91
[
34
1c
28
fs
134
5c
92
\
35
1d
29
gs
135
5d
93
]
36
1e
30
re
136
5e
94
^
37
1f
31
us
137
5f
95
_
40
20
32
sp
140
60
96
'
41
21
33
!
141
61
97
a
42
22
34
"
142
62
98
b
43
23
35
#
143
63
99
c
44
24
36
$
144
64
100
d
45
25
37
%
145
65
101
e
46
26
38
&
146
66
102
f
47
27
39
`
147
67
103
g
50
28
40
(
150
68
104
h
51
29
41
)
151
69
105
i
52
2a
42
*
152
6a
106
j
53
2b
43
+
153
6b
107
k
54
2c
44
,
154
6c
108
l
55
2d
45
-
155
6d
109
m
56
2e
46
.
156
6e
110
n
57
2f
47
/
157
6f
111
o
60
30
48
0
160
70
112
p
61
31
49
1
161
71
113
q
62
32
50
2
162
72
114
r
63
33
51
3
163
73
115
s
64
34
52
4
164
74
116
t
65
35
53
5
165
75
117
u
66
36
54
6
166
76
118
v
67
37
55
7
167
77
119
w
70
38
56
8
170
78
120
x
71
39
57
9
171
79
121
y
72
3a
58
:
172
7a
122
z
73
3b
59
;
173
7b
123
{
74
3c
60
<
174
7c
124
|
75
3d
61
=
175
7d
125
}
76
3e
62
>
176
7e
126
~
77
3f
63
?
177
7f
127
del
GB2312
GB2312又稱為GB2312-80字元集,全稱為《信息交換用漢字編碼字元集·基本集》,由原中國國家標準總局發布,1981年5月1日實施,是中國國家標準的簡體中文字元集。它所收錄的漢字已經覆蓋99.75%的使用頻率,基本滿足了漢字的計算機處理需要。在中國大陸和新加坡獲廣泛使用。
GB2312收錄簡化漢字及一般符號、序號、數字、拉丁字母、日文假名、希臘字母、俄文字母、漢語拼音符號、漢語注音字母,共 7445 個圖形字元。其中包括6763個漢字,其中一級漢字3755個,二級漢字3008個;包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西里爾字母在內的682個全形字元
GB2312中對所收漢字進行了“分區”處理,每區含有94個漢字/符號。這種表示方式也稱為區位碼。
它是用雙位元組表示的,兩個位元組中前面的位元組為第一位元組,後面的位元組為第二位元組。習慣上稱第一位元組為“高位元組” ,而稱第二位元組為“低位元組”。“高位位元組”使用了0xA1-0xF7(把01-87區的區號加上0xA0),“低位位元組”使用了0xA1-0xFE(把01-94加上0xA0)。
以GB2312字元集的第一個漢字“啊”字為例,它的區號16,位號01,則區位碼是1601,在大多數電腦程式中,高位元組和低位元組分別加0xA0得到程式的漢字處理編碼0xB0A1。計算公式是:0xB0=0xA0+16, 0xA1=0xA0+1。
GBK
GBK字元集是GB2312的擴展(K),GBK1.0收錄了21886個符號,它分為漢字區和圖形符號區,漢字區包括21003個字元。
GBK字元集主要擴展了繁體中文字的支持。
BIG5
BIG5又稱大五碼或五大碼,1984年由台灣財團法人信息工業策進會和五間軟體公司宏碁 (Acer)、神通 (MiTAC)、佳佳、零壹 (Zero One)、大眾 (FIC)創立,故稱大五碼。
Big5碼的產生,是因為當時台灣不同廠商各自推出不同的編碼,如倚天碼、IBM PS55、王安碼等,彼此不能兼容;另一方面,台灣政府當時尚未推出官方的漢字編碼,而中國大陸的GB2312編碼亦未有收錄繁體中文字。
Big5字元集共收錄13,053箇中文字,該字元集在中國台灣使用。耐人尋味的是該字元集重複地收錄了兩個相同的字:“兀”(0xA461及0xC94A)、“嗀”(0xDCD1及0xDDFC)。
Big5碼使用了雙位元組儲存方法,以兩個位元組來編碼一個字。第一個位元組稱為“高位位元組”,第二個位元組稱為“低位位元組”。高位位元組的編碼範圍0xA1-0xF9,低位位元組的編碼範圍0x40-0x7E及0xA1-0xFE。
儘管Big5碼內包含一萬多個字元,但是沒有考慮社會上流通的人名、地名用字、方言用字、化學及生物科等用字,沒有包含日文平假名及片假字母。
例如台灣視“著”為“著”的異體字,故沒有收錄“著”字。康熙字典中的一些部首用字(如“亠”、“疒”、“辵”、“癶”等)、常見的人名用字(如“堃”、“煊”、“栢”、“喆”等) 也沒有收錄到Big5之中。
GB18030
GB18030的全稱是GB18030-2000《信息交換用漢字編碼字元集基本集的擴充》,是我國政府於2000年3月17日發布的新的漢字編碼國家標準,2001年8月31日後在中國市場上發布的軟體必須符合本標準。GB 18030字元集標準的出台經過廣泛參與和論證,來自國內外知名信息技術行業的公司,信息產業部和原國家質量技術監督局聯合實施。
GB 18030字元集標準解決漢字、日文假名、朝鮮語和中國少數民族文字組成的大字元集計算機編碼問題。該標準的字元總編碼空間超過150萬個編碼位,收錄了27484個漢字,覆蓋中文、日文、朝鮮語和中國少數民族文字。滿足中國大陸、香港、台灣、日本和韓國等東亞地區信息交換多文種、大字量、多用途、統一編碼格式的要求。並且與Unicode 3.0版本兼容,填補Unicode擴展字元字彙“統一漢字擴展A”的內容。並且與以前的國家字元編碼標準(GB2312,GB13000.1)兼容。
編碼方法:
GB 18030標準採用單位元組、雙位元組和四位元組三種方式對字元編碼。
單位元組部分使用0×00至0×7F碼(對應於ASCII碼的相應碼)。
雙位元組部分,首位元組碼從0×81至0×FE,尾位元組碼位分別是0×40至0×7E和0×80至0×FE。
四位元組部分採用GB/T 11383未採用的0×30到0×39作為對雙位元組編碼擴充的後綴,這樣擴充的四位元組編碼,其範圍為0×81308130到0×FE39FE39。其中第一、三個位元組編碼碼位均為0×81至0×FE,第二、四個位元組編碼碼位均為0×30至0×39。
按照程式設計師的稱呼,GB2312、GBK到GB18030都屬於雙位元組字元集(DBCS)。
接著是國際通用的unicode字元集
ANSI編碼
不同的國家和地區制定了不同的標準,由此產生了 GB2312, BIG5, JIS 等各自的編碼標準。這些使用 2 個位元組來代表一個字元的各種漢字延伸編碼方式,稱為 ANSI 編碼。在簡體中文系統下,ANSI 編碼代表 GB2312 編碼,在日文作業系統下,ANSI 編碼代表 JIS 編碼。
Unicode
名稱由來
Unicode字元集編碼是(Universal Multiple-Octet Coded Character Set) 通用多八位編碼字元集的簡稱,支持世界上超過650種語言的國際字元集。Unicode允許在同一伺服器上混合使用不同語言組的不同語言。它是由一個名為 Unicode 學術學會(Unicode Consortium)的機構制訂的字元編碼系統,支持現今世界各種不同語言的書面文本的交換、處理及顯示。該編碼於1990年開始研發,1994年正式公布,最新版本是2005年3月31日的Unicode 4.1.0。Unicode是一種在計算機上使用的字元編碼。它為每種語言中的每個字元設定了統一併且唯一的二進制編碼,以滿足跨語言、跨平台進行文本轉換、處理的要求。
編碼方法
Unicode 標準始終使用十六進制數字,而且在書寫時在前面加上前綴“U+”,例如字母“A”的編碼為 0X0041 。所以“A”的編碼書寫為“U+0041”。
UTF-8 編碼
UTF-8是Unicode的其中一個使用方式。 UTF是 Unicode Translation Format,即把Unicode轉做某種格式的意思。
UTF-8便於不同的計算機之間使用網路傳輸不同語言和編碼的文字,使得雙位元組的Unicode能夠在現存的處理單位元組的系統上正確傳輸。
UTF-8使用可變長度位元組來儲存 Unicode字元,例如ASCII字母繼續使用1位元組儲存,重音文字、希臘字母或西里爾字母等使用2位元組來儲存,而常用的漢字就要使用3位元組。輔助平面字元則使用4位元組。
UTF-16 和 UTF-32 編碼
UTF-32、UTF-16和 UTF-8 是 Unicode 標準的編碼字元集字元編碼方案,UTF-16 使用一個或兩個未分配的 16 位代碼單元的序列對 Unicode 代碼點進行編碼;UTF-32 即將每一個 Unicode 代碼點表示為相同值的 32 位整數
通過一個問題了解unicode編碼
問題:使用Windows記事本的“另外儲存為”,可以在ANSI、GBK、Unicode、Unicode big endian和UTF-8這幾種編碼方式間相互轉換。同樣是txt檔案,Windows怎樣識別編碼方式的呢?
Unicode、Unicode big endian和UTF-8編碼的txt檔案的開頭會多出幾個位元組,分別是FFFE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-8)。但這些標記是基於什麼標準呢?
ANSI字元集定義:ASCII字元集,以及由此派生併兼容的字元集,如:GB2312,正式的名稱為MBCS(Multi-Byte Chactacter System,多位元組字元系統),通常也稱為ANSI字元集。
UNICODE 與 UTF8、UTF16
由於每種語言都制定了自己的字元集,導致最後存在的各種字元集實在太多,在國際交流中要經常轉換字元集非常不便。因此,產生了Unicode字元集,它固定使用16 bits(兩個位元組)來表示一個字元,共可以表示65536個字元
標準的 Unicode 稱為UTF-16(UTF:UCS Transformation Format )。後來為了雙位元組的Unicode能夠在現存的處理單位元組的系統上正確傳輸,出現了UTF-8,使用類似MBCS的方式對Unicode進行編碼。(Unicode字元集有多種編碼形式)
例如"連通"兩個字的Unicode標準編碼UTF-16 (big endian)為:DE 8F 1A 90
而其UTF-8編碼為:E8 BF 9E E9 80 9A
當一個軟體打開一個文本時,它要做的第一件事是決定這個文本究竟是使用哪種字元集的哪種編碼保存的。軟體一般採用三種方式來決定文本的字元集和編碼:
檢測檔案頭標識,提示用戶選擇,根據一定的規則猜測
最標準的途徑是檢測文本最開頭的幾個位元組,開頭位元組 Charset/encoding,如下表:
EF BB BF : UTF-8
FF FE : UTF-16/UCS-2, little endian
FE FF : UTF-16/UCS-2, big endian
FF FE 00 00 : UTF-32/UCS-4, little endian.
00 00 FE FF : UTF-32/UCS-4, big-endian.
1、big endian和little endian
big endian和little endian是CPU處理多位元組數的不同方式。例如“漢”字的Unicode編碼是6C49。那么寫到檔案里時,究竟是將6C寫在前面,還是將49寫在前面?如果將6C寫在前面,就是big endian。還是將49寫在前面,就是little endian。
“endian”這個詞出自《格列佛遊記》。小人國的內戰就源於吃雞蛋時是究竟從大頭(Big-Endian)敲開還是從小頭(Little-Endian)敲開,由此曾發生過六次叛亂,其中一個皇帝送了命,另一個丟了王位。
我們一般將endian翻譯成“位元組序”,將big endian和little endian稱作“大尾”和“小尾”。
2、字元編碼內碼,順帶介紹漢字編碼
字元必須編碼後才能被計算機處理。計算機使用的預設編碼方式就是計算機的內碼。早期的計算機使用7位的ASCII編碼,為了處理漢字,程式設計師設計了用於簡體中文的GB2312和用於繁體中文的big5。
GB2312(1980年)一共收錄了7445個字元,包括6763個漢字和682個其它符號。漢字區的內碼範圍高位元組從B0-F7,低位元組從A1-FE,占用的碼位是72*94=6768。其中有5個空位是D7FA-D7FE。
GB2312支持的漢字太少。1995年的漢字擴展規範GBK1.0收錄了21886個符號,它分為漢字區和圖形符號區。漢字區包括21003個字元。2000年的GB18030是取代GBK1.0的正式國家標準。該標準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族文字。PC平台必須支持GB18030,對嵌入式產品暫不作要求。所以手機、MP3一般只支持GB2312。
從ASCII、GB2312、GBK到GB18030,這些編碼方法是向下兼容的,即同一個字元在這些方案中總是有相同的編碼,後面的標準支持更多的字元。在這些編碼中,英文和中文可以統一地處理。區分中文編碼的方法是高位元組的最高位不為0。按照程式設計師的稱呼,GB2312、GBK到GB18030都屬於雙位元組字元集 (DBCS)。
有的中文Windows的預設內碼還是GBK,可以通過GB18030升級包升級到GB18030。不過GB18030相對GBK增加的字元,普通人是很難用到的,通常我們還是用GBK指代中文Windows內碼。
GB2312的原文還是區位碼,從區位碼到內碼,需要在高位元組和低位元組上分別加上A0。
在DBCS中,GB內碼的存儲格式始終是big endian,即高位在前。
GB2312的兩個位元組的最高位都是1。但符合這個條件的碼位只有128*128=16384個。所以GBK和GB18030的低位元組最高位都可能不是1。不過這不影響DBCS字元流的解析:在讀取DBCS字元流時,只要遇到高位為1的位元組,就可以將下兩個位元組作為一個雙位元組編碼,而不用管低位元組的高位是什麼。
3、Unicode、UCS和UTF(UCS Transformation Format)
前面提到從ASCII、GB2312、GBK到GB18030的編碼方法是向下兼容的。而Unicode只與ASCII兼容(更準確地說,是與ISO-8859-1兼容),與GB碼不兼容。例如“漢”字的Unicode編碼是6C49,而GB碼是BABA。
UCS規定了怎么用多個位元組表示各種文字。而怎樣傳輸這些編碼,是由UTF(UCS Transformation Format)規範規定的。
常見的UTF規範包括UTF-8、UTF-7、UTF-16。
4、UTF的位元組序和BOM
UTF-8以位元組為編碼單元,沒有位元組序的問題。UTF-16以兩個位元組為編碼單元,在解釋一個UTF-16文本前,首先要弄清楚每個編碼單元的位元組序。例如收到一個“奎”的Unicode編碼是594E,“乙”的Unicode編碼是4E59。如果我們收到UTF-16位元組流“594E”,那么這是“奎”還是“乙”?
Unicode規範中推薦的標記位元組順序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM是一個有點小聰明的想法:
在UCS編碼中有一個叫做"ZERO WIDTH NO-BREAK SPACE"的字元,它的編碼是FEFF。而FFFE在UCS中是不存在的字元,所以不應該出現在實際傳輸中。UCS規範建議我們在傳輸位元組流前,先傳輸字元"ZERO WIDTH NO-BREAK SPACE"。
這樣如果接收者收到FEFF,就表明這個位元組流是Big-Endian的;如果收到FFFE,就表明這個位元組流是Little-Endian的。因此字元"ZERO WIDTH NO-BREAK SPACE"又被稱作BOM。
UTF-8不需要BOM來表明位元組順序,但可以用BOM來表明編碼方式。字元"ZERO WIDTH NO-BREAK SPACE"的UTF-8編碼是EF BB BF(讀者可以用我們前面介紹的編碼方法驗證一下)。所以如果接收者收到以EF BB BF開頭的位元組流,就知道這是UTF-8編碼了。
Windows就是使用BOM來標記文本檔案的編碼方式的。
寫到這裡對編碼有了大致的了解了,就可以理解網上一些文章的話了,比如有一篇很流行的文章《URL編碼與SQL注射》裡面有一段是這么說的:
其實url編碼就是一個字元ascii碼的十六進制。不過稍微有些變動,需要在前面加上“%”。比如“\”,它的ascii碼是92,92的十六進制是5c,所以“\”的url編碼就是%5c。那么漢字的url編碼呢?很簡單,看例子:“胡”的ascii碼是-17670,十六進制是BAFA,url編碼是“%BA%FA”。呵呵,知道怎么轉換的了吧。
這得從ASCII說起,擴展的ASCII字元集採用8bit255個字元顯然不夠用,於是各個國家紛紛制定了自己的文字編碼規範,其中中文的文字編碼規範叫做“GB2312-80”(就是GB2312),它是和ASCII兼容的一種編碼規範,其實就是用擴展ASCII沒有真正標準化這一點,把一個中文字元用兩個擴展ASCII字元來表示。文中說的的中文ASCII碼實際上就是簡體中文的編碼2312GB!它把ASCII又擴充了一個位元組,由於高位的第一位是0,所以會出現負數的形式,url編碼就是將漢字的這個GB2312編碼轉化成UTF-8的編碼並且每8位即一個位元組前面加上%符號表示。
那為何UTF-8是進行網路的規範傳輸編碼呢?
在Unicode里,所有的字元被一視同仁。漢字不再使用“兩個擴展ASCII”,而是使用“1個Unicode”,注意,漢字是“一個字元”了,於是,拆字、統計字數這些問題也就自然而然的解決了。但是,這個世界不是理想的,不可能在一夜之間所有的系統都使用Unicode來處理字元,所以Unicode在誕生之日,就必須考慮一個嚴峻的問題:和ASCII字元集之間的不兼容問題。
我們知道,ASCII字元是單個位元組的,比如“A”的ASCII是65。而Unicode是雙位元組的,比如“A”的Unicode是0065,這就造成了一個非常大的問題:以前處理ASCII的那套機制不能被用來處理Unicode了
另一個更加嚴重的問題是,C語言使用’\0’作為字元串結尾,而Unicode里恰恰有很多字元都有一個位元組為0,這樣一來,C語言的字元串函式將無法正常處理Unicode,除非把世界上所有用C寫的程式以及他們所用的函式館全部換掉
於是,比Unicode更偉大的東東誕生了,之所以說它更偉大是因為它讓Unicode不再存在於紙上,而是真實的存在於我們大家的電腦中。那就是:UTF
UTF= UCS Transformation Format UCS轉換格式,它是將Unicode編碼規則和計算機的實際編碼對應起來的一個規則。現在流行的UTF有2種:UTF-8和UTF-16
其中UTF-16和上面提到的Unicode本身的編碼規範是一致的,這裡不多說了。而UTF-8不同,它定義了一種“區間規則”,這種規則可以和ASCII編碼保持最大程度的兼容,這樣做的好處是壓縮了字元在西歐一些國家的記憶體消耗,減少了不必要的資源浪費,這在實際套用中是非常有必要的。
UTF-8有點類似於Haffman編碼,它將Unicode編碼為:
7F的字元,用單個位元組來表示;
80-7FF的字元用兩個位元組表示 (中文的編碼範圍)
800-FFFF的字元用3位元組表示
因為目前為止Unicode-16規範沒有指定FFFF以上的字元,所以UTF-8最多是使用3個位元組來表示一個字元。但理論上來說,UTF-8最多需要用6位元組表示一個字元。
在UTF-8里,英文字元仍然跟ASCII編碼一樣,因此原先的函式館可以繼續使用。而中文的編碼範圍是在0080-07FF之間,因此是2個位元組表示(但這兩個位元組和GB編碼的兩個位元組是不同的)。
base64編碼
定義
按照RFC2045的定義,Base64被定義為:Base64內容傳送編碼被設計用來把任意序列的8位位元組描述為一種不易被人直接識別的形式。
適用範圍
Base64編碼可用於在HTTP環境下傳遞較長的標識信息。例如,在Java持久化系統Hibernate中,就採用了Base64來將一個較長的唯一標識符(一般為128-bit的UUID)編碼為一個字元串,用作HTTP表單和HTTP GET URL中的參數。在其他應用程式中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,採用Base64編碼不僅比較簡短,同時也具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。
然而,標準的Base64並不適合直接放在URL里傳輸,因為URL編碼器會把標準Base64中的“/”和“+”字元變為形如“%XX”的形式,而這些“%”號在存入資料庫時還需要再進行轉換,因為ANSI SQL中已將“%”號用作通配符。
為解決此問題,可採用一種用於URL的改進Base64編碼,它不在末尾填充'='號,並將標準Base64中的“+”和“/”分別改成了“-”和“_”,這樣就免去了在URL編解碼和資料庫存儲時所要作的轉換,避免了編碼信息長度在此過程中的增加,並統一了資料庫、表單等處對象標識符的格式。
另有一種用於正則表達式的改進Base64變種,它將“+”和“/”改成了“!”和“-”,因為“+”,“*”以及前面在IRCu中用到的“[”和“]”在正則表達式中都可能具有特殊含義。
此外還有一些變種,它們將“+/”改為“_-”或“._”(用作程式語言中的標識符名稱)或“.-”(用於XML中的Nmtoken)甚至“_:”(用於XML中的Name

相關詞條

熱門詞條

聯絡我們