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