|
Unicode 是一個系統,用來表示世界上所有不同語言的字符。當 Python 解析一個 XML 文檔時,所有的數據都是以unicode的形式保存在內存中的。 一會兒你就會了解,但首先,先看一些背景知識。 歷史注解. 在 unicode 之前,對于每一種語言都存在獨立的字符編碼系統,每個系統都使用相同的數字(0-255)來表示這種語言的字符。一些語言 (像俄語) 對于如何表示相同的字符還有幾種有沖突的標準;另一些語言 (像日語) 擁有太多的字符,需要多個字符集。在系統之間進行文檔交流是困難的,因為對于一臺計算機來說,沒有方法可以識別出文檔的作者使用了哪種編碼模式;計算機看 到的只是數字,并且這些數字可以表示不同的東西。接著考慮到試圖將這些 (采用不同編碼的) 文檔存放到同一個地方 (比如在同一個數據庫表中);你需要在每段文本的旁邊保存字符的編碼,并且確保在傳遞文本的同時將編碼也進行傳遞。接著考慮多語言文檔,即在同一文檔中使 用了不同語言的字符。(比較有代表性的是使用轉義符來進行模式切換;噗,我們處于俄語 koi8-r 模式,所以字符 241 表示這個;噗,現在我們處于 Mac 希臘語模式,所以字符 241 表示其它什么。等等。) 這些就是 unicode 被設計出來要解決的問題。 為了解決這些問題,unicode 用一個 2 字節數字表示每個字符,從 0 到 65535。[8] 每個 2 字節數字表示至少在一種世界語言中使用的一個唯一字符。(在多種語言中都使用的字符具有相同的數字碼。) 這樣就確保每個字符一個數字,并且每個數字一個字符。Unicode 數據永遠不會模棱兩可。 當然,仍然還存在著所有那些遺留的編碼系統的情況。例如,7 位 ASCII,它可以將英文字符存諸為從 0 到 127 的數值。(65 是大寫字母 “A”,97 是小寫字母 “a”,等等。) 英語有著非常簡單的字母表,所以它可以完全用 7 位 ASCII 來表示。像法語、西班牙語和德語之類的西歐語言都使用叫做 ISO-8859-1 的編碼系統 (也叫做“latin-1”),它使用 7 位 ASCII 字符表示從 0 到 127 的數字,但接著擴展到了 128-255 的范圍來表示像 n 上帶有一個波浪線(241),和 u 上帶有兩個點(252)的字符。Unicode 在 0 到 127 上使用了同 7 位 ASCII 碼一樣的字符表,在 128 到 255上同 ISO-8859-1 一樣,接著使用剩余的數字,256 到 65535,擴展到表示其它語言的字符。 在 處理 unicode 數據時,在某些地方你可能需要將數據轉換回這些遺留編碼系統之一。例如,為了同其它一些計算機系統集成,這些系統期望它的數據使用一種特定的單字節編碼模 式,或將數據打印輸出到一個不識別 unicode 的終端或打印機?;驅祿4娴揭粋€明確指定編碼模式的 XML 文檔中。 在了解這個注解之后,讓我們回到 Python上來。 從 2.0 版開始,Python 整個語言都已經支持 unicode。XML 包使用 unicode 來保存所有解析了的 XML 數據,而且你可以在任何地方使用 unicode。 例 9.13. unicode 介紹>>> s = u'Dive in' 例 9.14. 存儲非 ASCII 字符>>> s = u'La Pe\xf1a' 還記得我說過:需要從一個 unicode 得到一個正常字符串時,Python 通常默認將 unicode 轉換成 ASCII 嗎?嗯,這個默認編碼模式是一個可以定制的選項。 例 9.15. sitecustomize.py# sitecustomize.py 例 9.16. 設置默認編碼的效果>>> import sys 例 9.17. 指定.py文件的編碼如果你打算在你的 Python 代碼中保存非 ASCII 字符串,你需要在每個文件的頂端加入編碼聲明來指定每個 .py 文件的編碼。這個聲明定義了 .py 文件的編碼為 UTF-8: #!/usr/bin/env python 現在,想想 XML 中的編碼應該是怎樣的呢?不錯,每一個 XML 文檔都有指定的編碼。重復一下,ISO-8859-1 是西歐語言存放數據的流行編碼方式。KOI8-R 是俄語流行的編碼方式。編碼――如果指定了的話――都在 XML 文檔的首部。 例 9.18. russiansample.xml
例 9.19. 解析 russiansample.xml>>> from xml.dom import minidom 總結一下,如果你以前從沒有看到過 unicode,倒是有些唬人,但是在 Python 處理 unicode 數據真是非常容易。如果你的 XML 文檔都是 7 位的 ASCII (像本章中的例子),你差不多永遠都不用考慮 unicode。Python 在進行解析時會將 XML 文檔中的 ASCII 數據轉換為 unicode,在任何需要的時候強制轉換回為 ASCII,你甚至永遠都不用注意。但是如果你要處理其它語言的數據,Python 已經準備好了。 |
| 只有注冊用戶登錄后才能發表評論。 | ||
|
||
|
相關文章:
|
||
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
|
||
|
|


