文字編碼
當計算機出現後,人們就想辦法將文字儲存到計算機中,就得想方設法將文字表示成由二進位制組成的編碼,最開始的比較成熟的編碼就是
ansi
編碼,它使用乙個位元組,即
8個二進位制位表示乙個字母,這樣就可以表示多達
256個字母,這對於只有
26個字母的西文來說足夠用了,除了字母外,還可將像標點符號、控制符等加入到其中。
當計算機產業發展起來後,當世界上其它地方的人們開始使用計算機後,這種編碼顯示出了它的侷限性,包括漢字在內的東方文字根本無法用乙個位元組編碼,這是早期編碼設計人員沒有想到或者不想去考慮的事,可以用兩個字概括-「自私」。所以世界各國為了讓計算機服務於自己的國家,設計了符合自己國情的編碼,比較成功的有我國大陸的
gb2312
碼和台灣的
big-5
碼。gb2312
碼實現起來很簡單,就是用
1個位元組表示西文字母,用
2個位元組表示漢字。但其中的編碼有一些規則,這裡沒有足夠的篇幅來論述。
當幾乎每個國家都使用自己的編碼系統,國與國之間的交流又成了問題,就像英語不好的人和老外談生意一樣,需要帶乙個翻譯。計算機需要安裝乙個編碼轉換器,非常不方便。最後有人(國際標準化組織)出來搞了乙個全球統一的編碼,這就是著名的
unicode
,我把它看成是宇宙編碼的簡稱(
universe code
),實際也是這個意思,這個編碼可以使用多達4個位元組來編碼乙個字元,再加上一些限制,這樣,則可以容納
1114112
個字元,這樣,足夠編碼世上所有字元。
在實際絕大多數應用中,只需要用兩個位元組來編碼就夠了,所以
unicode
有許多在實際中應用的子集,還有一些它的壓縮編碼等。我們在程式設計過程中用的一般是由兩個位元組編碼的
unicode
。值的一提的是,我國國內使用的
gb18030
編碼也是
unicode
的乙個子集,而
gb2312
又是gb18030
的乙個子集。
之後我們再提乙個比較特別的壓縮編碼,在提這個編碼以前我們再說一說一種應用廣泛的文件技術-
xml。
xml
技術
我們的計算機每天都要處理和文字有關的東西,不只是平面的文字,還有立體的文字,我稱它們是平面的還是立體的,是根據這些文字的用途,如果只是一篇文章、一條新聞報道,我們可以稱它為是平面的,從哪個角度來看都是一樣的。如果說我們要在網上發布一商品的資訊,包括它的廠家資訊、產品的各種引數,產品的**等等,那麼這條資訊就是立體的文字,每個人看它的角度都不一樣,有人看重品牌,有人看重**,有人看重它的某項技術引數。如果我們把這條資訊按照文章的格式發布出去,就無法滿足以上這些人的要求,因為我們無法從平面的文字中提取這些資訊以供這些人搜尋。所以要展示立體的文字,就得使用展示立體文字的技術,這種技術之一就是
xml。我們平常打交道最多的文字-網頁,就是使用這種技術的子集來構建的。之所以計算機能夠理解這些文字並且知道如何處理它們,就是因為它使用了這項技術。
不僅如此,除了文字之外,
xml還能夠處理包括音訊等多**資料,所以說它是「文件處理技術」是有些狹隘了。總之,我個人理解能力有限,無法全面理解博大精深的
xml技術,請各位讀者牛人們獨自體會吧。
如此好的技術,總是老外先於我們搞出來,作為國人,心有不甘啊。沒有研究的福分,總還有使用它的幸運。下面就我在工作之中使用
xml技術的心得作下論述。
問題及解決
在乙個裝置管理系統中,我們要把一台裝置表示成由許多材料組成的。起始時,我想把這種關係儲存到資料庫中,建立乙個資料表,每一組字段表示一種材料,不是乙個,是一組,包括這種材料的名稱、型號、需要使用的數量等。這就需要
3個字段,假設一台裝置需要使用三種材料,那麼這台裝置對應的資料記錄就需要
9個字段。事實上每台裝置可能用到的材料有幾十種甚至上百種,這樣,我們就無法建立幾百個欄位來容納這台裝置了。於是,我想到了
xml技術。我們用一篇
xml文件來容納這百十種材料,完全是小菜一碟。然後將這篇
xml文件的內容作為乙個裝置結構欄位的內容儲存到資料庫中,這樣,問題就輕而易舉地解決了。
當我這樣想,並且著手這樣去做的時候,還有一些瑣碎的問題在前面等著呢。
在window
下使用vb
程式設計,需要使用
msxml
這個元件來建立
xml文件,將裝置所需要的各種材料以
xml節點的方式組織進文件中。當我建立好這個文件,將這個文件的文字儲存進資料庫中後,再將資料庫中的這個字段拷貝出來貼上到文字文件中時,記事本中本應當顯示中文的地方卻顯示為亂碼。
經過多方查詢資料,最後發現,我們經常看的文字文件是
gb2312
編碼的,而
xml文件是
utf-8
編碼的。這就是我們之前所提到的那個「比較特殊」的編碼,就是這個編碼壞的事。兩種編碼不一樣,所以直接用剪貼簿拷來拷去,就使得其中的中文變成了亂碼。
為什麼當
unicode
成為全球統一編碼之後,西方人又搞了一套
utf-8
編碼呢,是因為
unicode
資料量太大了,他們經常使用的西文字元用乙個位元組就搞定了,幹嘛還要用兩個位元組來表示呢,於是,他們設計的這種編碼,其中的西文字元編碼又退回到最初的
ansi
編碼。而中文字元在這種編碼體系中卻要占用
3個位元組!也許這和它的設計方法有關,總之,我看到這種編碼方式第一感覺就是,它的設計者真是損人利已啊!比自私的
ansi
編碼要可惡得多。這種編碼我第一次使用它就造成了一天多的工作延誤。
最終,我使用微軟的編碼轉換函式搞定了編碼,後又使用了寫二進位制檔案的方式將資料庫字段轉換成臨時的
xml檔案(寫文字檔案的方式根本無法使用),以供分析裝置表中的材料。直到完成分析工作,再將臨時
xml檔案刪除。
一點反思
老外將xml技術弄成
utf編碼的,我們也完全可以把它弄成符合我們利益的
gb2312
編碼的,但是這樣我們還得寫自己的
xml解析器才行,我們有幾個人會寫,或者有哪些公司願意花費精力來寫,這些都是問題。沒有**遠矚的魄力,只看重眼前利益,我們也許永遠只能使用他人的先進技術而受制於他人。
字元編碼與文字基礎
一.字元編碼基礎知識 1.計算機硬體包括cpu 硬碟 記憶體,其中cpu負責從記憶體中讀取指令並解碼執行。作業系統和應用軟體執行時都是先把程式載入到記憶體中,然後應用程式通過呼叫作業系統提供的介面,來間接實現硬體的使用。2.文字編輯器儲存原理 應用程式載入到記憶體中,先將編輯的內容儲存在記憶體中,然...
Vue文字轉編碼與解碼
最近用到的,文字輸入框是乙個元件,在後台管理系統中儲存,關鍵 如下 el form item v if modelform.type modelform.type aboutus label prop desc span style text line center 企業簡介 span tinymc...
URL中文編碼與文字中文編碼的關係
寫在前面 系統環境 windows 10 軟體環境 360急速瀏覽器11.0,核心版本69 基於chromium 在使用爬蟲過程中,我們常常要對url位址進行處理 在發包時對字串進行編碼 在接收資料時,對引數進行解碼。由於現在常見的瀏覽器已經都對url中的字元進行了解碼,因此在使用瀏覽器時,位址列中...