曝光臺(tái) 注意防騙
網(wǎng)曝天貓店富美金盛家居專營(yíng)店坑蒙拐騙欺詐消費(fèi)者
與大多數(shù)X M L屬性不同,這些必須按上面的順序依次出現(xiàn)。另一方面,也是與大多數(shù)X M L
屬性不同,e n c o d i n g屬性值不是大小寫(xiě)敏感的。這種不一致主要是因?yàn)閄 M L對(duì)現(xiàn)有I S O和I A N A
標(biāo)準(zhǔn)關(guān)于字符編碼命名的依賴。
針對(duì)X M L的、支持最廣泛的字符編碼包括:
• 統(tǒng)一代碼:“U T F - 8”,“U T F - 1 6”
• ISO 10646:“I S O - 1 0 6 4 6 - U C S - 2”,“I S O - 1 0 6 4 6 - U C S - 4”
• ISO 8859:“I S O - 8 8 5 9 - n”(其中的n代表數(shù)字1到9)
• JIS X-0208-1997:“I S O - 2 0 2 2 - J P”,“S h i f t - J I S”,“E U C - J P”
雖然H T T P為服務(wù)器聯(lián)絡(luò)客戶端(瀏覽器)提供了一種方法,編碼的作用也正在于此,但有
時(shí)候并沒(méi)有服務(wù)器的存在(比如在我們察看本地文件系統(tǒng)上的文件時(shí))。使用e n c o d i n g屬性也比
試圖依靠自動(dòng)檢測(cè)字符編碼要可靠得多,后者已經(jīng)很常見(jiàn),但無(wú)法區(qū)分U T F - 8和I S O - 8 8 5 9 - 1,也
不能可靠地檢測(cè)出U T F - 7編碼。
下面,我們?cè)偌?xì)致地了解一下編碼的意義。
(1) 字符編碼
統(tǒng)一代碼原本是設(shè)計(jì)成一個(gè)簡(jiǎn)單的1 6位的標(biāo)量值集合,因?yàn)樗魏维F(xiàn)代語(yǔ)言必需的
大多數(shù)特殊符號(hào)或字符。盡管這65 536個(gè)字符并沒(méi)有全部用上,但很明顯需要的字符會(huì)越來(lái)越多,
而統(tǒng)一代碼也增加了代理塊( surrogate block)機(jī)制來(lái)增加1 048 576個(gè)額外字符(稍后我們將詳
細(xì)闡述)。
雖然統(tǒng)一代碼使用標(biāo)量值識(shí)別字符,但存儲(chǔ)這些數(shù)字還是有不同的辦法。X M L需要在網(wǎng)絡(luò)
中廣泛使用的設(shè)計(jì)目的要求有各種各樣的編碼方法。
U T F - 8能夠正常地處理7位的A S C I I碼,但對(duì)于其他任何內(nèi)容都需要2到8個(gè)字節(jié)(每個(gè)的變
化范圍都是從8 0到F F)—對(duì)于占統(tǒng)治地位的A S C I I文本來(lái)說(shuō)相當(dāng)不錯(cuò),但對(duì)于除此之外的事物
來(lái)說(shuō)則不是什么好消息。由于U T F - 8對(duì)非A S C I I數(shù)據(jù)支持不夠,而且J a v a是構(gòu)建在統(tǒng)一代碼字符
集之上,所以對(duì)于國(guó)際化的應(yīng)用來(lái)說(shuō), U T F - 8并不是一個(gè)好的選擇。“U T F”意味著“統(tǒng)一代碼
傳輸格式”(在統(tǒng)一代碼文檔中是這樣描述的),或者“ U S C傳輸格式”(在ISO 10646中是這樣
描述的)。
第2章XML 語(yǔ)法使用39
下載
U T F - 1 6編碼最為簡(jiǎn)單,它用兩種傳統(tǒng)方式(大尾數(shù)法和小尾數(shù)法)中的一種來(lái)存儲(chǔ)1 6位的
字符(這取決于計(jì)算機(jī)處理器的體系結(jié)構(gòu))。
其他字符可能使用代理塊(參見(jiàn)下節(jié))編碼。對(duì)U T F - 1 6的關(guān)注主要來(lái)自東亞,在那里有時(shí)
需要用兩個(gè)編碼單元來(lái)表示一個(gè)字符。但是,亞洲字符當(dāng)中的絕大部分都只需要一個(gè)編碼單元。
根據(jù)統(tǒng)一代碼FA Q,代理對(duì)的使用要比所有文本存儲(chǔ)的1 %少許多。所以,大多數(shù)構(gòu)造于統(tǒng)一代
碼之上的軟件使用的都是U T F - 1 6編碼。
U T F - 3 2編碼(幾乎等同于ISO 10646 UCS-4編碼)可以簡(jiǎn)化編程工作—所有的統(tǒng)一代碼字
符(以及大約4 0億個(gè)附加字符)能夠使用這種方法編碼。雖然對(duì)于某些語(yǔ)言/平臺(tái)來(lái)說(shuō)能夠簡(jiǎn)化
編程,但這并不是一種理想的選擇,因?yàn)橛眠@種編碼每個(gè)字符還是需要雙倍的存儲(chǔ)空間(也就
是A S C I I字符存儲(chǔ)空間的四倍)。
ISO 10 646和統(tǒng)一代碼之間的關(guān)系在h t t p : / / c o n s u l t . c e r n . c h / c n l / 2 1 5 / n o d e 4 7 . h t m l有詳細(xì)描述,I S O
8 8 5 9也在h t t p : / / p p e w w w. p h . g l a . a c . u k / ~ f l a v e l l / i s o 8 8 5 9 / i s o 8 8 5 9 - p o i n t e r s . h t m l有相關(guān)的討論。
(2) 代理塊
很明顯,65 536個(gè)字符可能足夠支持大多數(shù)現(xiàn)代語(yǔ)言,滿足學(xué)者和歷史學(xué)家的需要,具備表
現(xiàn)語(yǔ)言充滿活力的天性,但同時(shí)它也需要更大的空間。例如,統(tǒng)一代碼添加了大約14 500個(gè)復(fù)合
字符以兼容現(xiàn)有的字符集;此外還有許許多多數(shù)學(xué)符號(hào)、亞洲象形文字、歷史字符沒(méi)有包含在
統(tǒng)一代碼當(dāng)中。所以,統(tǒng)一代碼增加了代理塊( surrogate block)。
代理塊是統(tǒng)一代碼用來(lái)擴(kuò)展超出現(xiàn)有1 6位數(shù)字的字符空間的辦法。它保留了兩個(gè)1 024個(gè)字
符的區(qū)域( D 8 0 0到D B F F和D C 0 0到D F F F)以容納1 048 576個(gè)附加字符。第一個(gè)區(qū)域內(nèi)的1 6位值
是一個(gè)3 2位數(shù)字的高端部分,而第二個(gè)則是低端部分。這就允許并不理解這些組合字符的程序
能夠簡(jiǎn)單地顯示一個(gè)或兩個(gè)占位符。這些擴(kuò)充字符能夠用于現(xiàn)代象形文字語(yǔ)言(例如漢語(yǔ)和日
語(yǔ)),古語(yǔ)(例如埃及的象形文字),甚至新發(fā)明的語(yǔ)言( K l i n g o n、To l k i e n的D w a r v i s h碼)。
但無(wú)論是好是壞,代理塊字符對(duì)并不是合法的X M L字符。
(3) 字節(jié)順序掩碼(Byte-Order Mark、B O M)
統(tǒng)一代碼數(shù)據(jù)利用B O M作為信號(hào)來(lái)指定所使用的編碼方法(參見(jiàn)表2 - 4)。
表2 - 4
字節(jié)編碼形式
00 00 FE FF U T F - 3 2 / U C S - 4,大尾數(shù)法
FF FE 00 00 U T F - 3 2 / U C S - 4,小尾數(shù)法
FE FF 00 ## U T F - 1 6,大尾數(shù)法
FF FE ## 00 U T F - 1 6,小尾數(shù)法
EF BB BF U T F - 8
雖然這些值在X M L數(shù)據(jù)中并不是合法的,但它們能夠把有效的X M L數(shù)據(jù)加入到被傳輸?shù)臄?shù)
據(jù)對(duì)象當(dāng)中,并為X M L解析器和/或應(yīng)用程序提供有價(jià)值(雖然通常是冗余的)的編碼信息。
X M L解析器必需在X M L數(shù)據(jù)之前處理B O M,因?yàn)樾枰瑫r(shí)支持U T F - 8和U T F - 1 6編碼。
下面,讓我們看一看序言的第二種可選的組件。
2. 文檔類型聲明
我們不能把它同文檔類型定義(也就是通常所說(shuō)的D T D)相混淆的。而且,文檔類型聲明
40使用XML 高級(jí)編程
下載
中包含著文檔類型定義的內(nèi)部子集和/或到外部子集的引用。
所有有效的X M L文檔必需包含這個(gè)聲明,但簡(jiǎn)單的格式正規(guī)的文檔并不需要這樣的包含關(guān)
系,而且它們也不包含(除了5個(gè)標(biāo)準(zhǔn)X M L實(shí)體)任何實(shí)體引用。如果使用了附加的字符實(shí)體,
中國(guó)航空網(wǎng) m.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級(jí)編程上(17)