點(diǎn)亮建筑新夢(mèng)想
LIGHT BUILDING NEW DREAM
企業(yè)BIM定制培訓(xùn)服務(wù)經(jīng)典案例
柏慕聯(lián)創(chuàng)為中國(guó)電建集團(tuán)成都勘測(cè)設(shè)計(jì)研究院有限公司提供全國(guó)BIM技能等級(jí)考試考前專場(chǎng)培訓(xùn)(一)
柏慕聯(lián)創(chuàng)為中國(guó)電建集團(tuán)成都勘測(cè)設(shè)計(jì)研究院有限公司提供全國(guó)BIM技能等級(jí)考試考前專場(chǎng)培訓(xùn)(二)
柏慕聯(lián)創(chuàng)為中國(guó)電建集團(tuán)成都勘測(cè)設(shè)計(jì)研究院有限公司提供全國(guó)BIM技能等級(jí)考試考前專場(chǎng)培訓(xùn)(三)
柏慕聯(lián)創(chuàng)為中國(guó)電建集團(tuán)成都勘測(cè)設(shè)計(jì)研究院有限公司提供全國(guó)BIM技能等級(jí)考試考前專場(chǎng)培訓(xùn)(四)
柏慕聯(lián)創(chuàng)為中國(guó)電建集團(tuán)成都勘測(cè)設(shè)計(jì)研究院有限公司提供全國(guó)BIM技能等級(jí)考試考前專場(chǎng)培訓(xùn)(五)
BIMBOX | 空間基因:建筑信息編碼簡(jiǎn)史(一) 二維碼
今天開(kāi)始,我們花上幾期的時(shí)間,給你講一個(gè)比較大的話題:建筑信息編碼。 2018年5月1日《GBT 51269-2017 建筑信息模型分類(lèi)和編碼標(biāo)準(zhǔn)》正式執(zhí)行,很多人還是有一肚子的問(wèn)號(hào)。 ● 編碼到底是什么?能干什么用? ● 為什么一定要編碼?用模型不行嗎? ● 編碼標(biāo)準(zhǔn)的執(zhí)行和我有什么關(guān)系?未來(lái)會(huì)影響哪些領(lǐng)域? 即便是對(duì)編碼稍有了解的人,也對(duì)它有兩個(gè)比較深的誤解: 誤解一:編碼就是給建筑物的構(gòu)件上「身份證」,給墻、柱、梁、板等物體賦予ID,統(tǒng)計(jì)用量時(shí)會(huì)比較方便。 但當(dāng)你去翻看《分類(lèi)和編碼標(biāo)準(zhǔn)》的時(shí)候,會(huì)發(fā)現(xiàn)里面還有項(xiàng)目階段、工作成果、工具、甚至是參與角色的編碼,這些可不是建筑構(gòu)件啊,為什么也要編碼? 誤解二:編碼標(biāo)準(zhǔn)是給軟件開(kāi)發(fā)商用的,和普通設(shè)計(jì)師沒(méi)關(guān)系,只要等軟件開(kāi)發(fā)好了直接用就行了,編碼會(huì)自動(dòng)附在模型上。 理論上是這樣,但越來(lái)越多大型企業(yè)的項(xiàng)目或海外項(xiàng)目,已經(jīng)明確要求在提交設(shè)計(jì)內(nèi)容的時(shí)候按照某某規(guī)范進(jìn)行編碼,而軟件的「自動(dòng)編碼」功能還遙遙無(wú)期,這又該怎么辦? 這一個(gè)系列,我們就一步一步剝開(kāi)建筑信息編碼這個(gè)大洋蔥,說(shuō)清楚它到底是干什么用的,北美三大編碼體系和英國(guó)的Uniclass是怎么回事,我國(guó)的編碼體系是什么情況,新出的分類(lèi)和編碼標(biāo)準(zhǔn)該怎么使用, 最后還會(huì)說(shuō)到,面對(duì)工程項(xiàng)目的編碼需求,我們?cè)撌褂檬裁礃拥墓ぞ邅?lái)完成工作。 好了,廢話不多說(shuō),BIMBOX開(kāi)車(chē)了。 當(dāng)我們說(shuō)編碼的時(shí)候,到底在說(shuō)什么? 所謂編碼,就是「用通用性的符號(hào)來(lái)簡(jiǎn)化某些含義」。人類(lèi)的語(yǔ)言就是一種編碼。 比如,「天上那個(gè)早上出來(lái)傍晚落下去的金色火球」,就是個(gè)很長(zhǎng)的含義,英文世界用「sun」這個(gè)字母組合來(lái)表達(dá)它。 中國(guó)就用一個(gè)圓圈中間加個(gè)點(diǎn)來(lái)表達(dá)它,后來(lái)這個(gè)符號(hào)演化成漢語(yǔ)里的「日」字。 不同地區(qū)使用不同的語(yǔ)言,這在人類(lèi)文明發(fā)展的幾千年里都沒(méi)有出現(xiàn)大問(wèn)題,文明互相接觸的時(shí)候可以互相學(xué)習(xí)對(duì)方的語(yǔ)言。一個(gè)人腦子里同時(shí)裝下「太陽(yáng)」、「Sun」、「お日さま」幾個(gè)符號(hào)并不會(huì)出現(xiàn)混亂。 但到了計(jì)算機(jī)發(fā)明出來(lái)、人類(lèi)進(jìn)入數(shù)字化時(shí)代的時(shí)候,麻煩可就出現(xiàn)了。 當(dāng)我們說(shuō)建筑信息編碼的時(shí)候,一個(gè)大前提就是用計(jì)算機(jī)來(lái)進(jìn)行編碼。換句話說(shuō),就是把自然語(yǔ)言編寫(xiě)成計(jì)算機(jī)可以讀取的數(shù)據(jù),這樣的數(shù)據(jù)才能自動(dòng)進(jìn)行計(jì)算和分析。 所以要說(shuō)清建筑信息編碼,就得先用一期的內(nèi)容來(lái)說(shuō)說(shuō)人類(lèi)進(jìn)入數(shù)字化時(shí)代碰到的麻煩,以及我們是怎么解決它們的,這件事還真沒(méi)想象那么簡(jiǎn)單。 你可以做一個(gè)有趣的試驗(yàn):在任意文件夾新建一個(gè)TXT文檔,輸入「聯(lián)通」兩個(gè)字,保存關(guān)閉,再打開(kāi)的時(shí)候,原來(lái)的兩個(gè)字變成了奇怪的亂碼。 這個(gè)詭異的現(xiàn)象,就是人們解決計(jì)算機(jī)編碼問(wèn)題遺留下來(lái)的一個(gè)小尾巴。我們最后再來(lái)回答這是怎么回事。 從語(yǔ)言到數(shù)字 計(jì)算機(jī)一開(kāi)始被發(fā)明出來(lái)是用來(lái)做算術(shù)題的,它通過(guò)內(nèi)部很多小開(kāi)關(guān)的打開(kāi)和關(guān)閉兩種狀態(tài),來(lái)表達(dá)不同的數(shù)字和運(yùn)算規(guī)則。 所以計(jì)算機(jī)只能處理兩個(gè)數(shù)字:0和1。一切數(shù)字都必須轉(zhuǎn)化成2進(jìn)制才能計(jì)算。十進(jìn)制是逢十進(jìn)一,二進(jìn)制是逢二進(jìn)一,十進(jìn)制的3轉(zhuǎn)化成二進(jìn)制就是11。 每一個(gè)小開(kāi)關(guān)的0或者1的狀態(tài),叫做比特(Bit)。 仔細(xì)一想,你會(huì)覺(jué)得有點(diǎn)怪:計(jì)算機(jī)面對(duì)一大串0和1的時(shí)候,它怎么知道哪里開(kāi)始、哪里結(jié)束,哪里斷開(kāi)呢?比如下面這串二進(jìn)制數(shù)字,如果把它理解成一個(gè)數(shù),換算成10進(jìn)制就是72: 而如果把這串?dāng)?shù)字從中間斷成兩部分,就分別表達(dá)4和8兩個(gè)數(shù): 為了解決這個(gè)問(wèn)題,人們就強(qiáng)制計(jì)算機(jī)每次都處理8個(gè)連在一起的數(shù)字,不能斷開(kāi),這8個(gè)比特組成的一個(gè)最小計(jì)算單元,就叫字節(jié)(Byte)。 你可以把一個(gè)字節(jié)看成一個(gè)編碼狀態(tài),每一位有兩種可能(0和1),一共8位,不同的排列組合可以表達(dá)出2的8次方=256種狀態(tài)。 人們發(fā)現(xiàn),這么多種狀態(tài)不僅可以表示數(shù)字,還可以把英文字母和一些特殊符號(hào)囊括進(jìn)來(lái)。這樣一來(lái),計(jì)算機(jī)就不僅可以處理數(shù)學(xué)問(wèn)題,還可以處理文字了。 不同字節(jié)狀態(tài)具體代表哪個(gè)字符,需要統(tǒng)一口徑。于是1968年,美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì)就制定了一套標(biāo)準(zhǔn),規(guī)定所有字節(jié)第一位統(tǒng)一為0,只用了八位數(shù)的后七位,也就是2的7次方=128種組合。 前32種是控制字符,讓計(jì)算機(jī)執(zhí)行一些特殊指令,比如00000000表示空字符,00001010表示換行。 從第33種組合開(kāi)始,后邊的字符分別代表英文字母、數(shù)字或一些特殊符號(hào)。比如01010011代表S,00110000代表數(shù)字0。 這樣,英文單詞Sun就可以變成三個(gè)8位數(shù)的字節(jié),被計(jì)算機(jī)理解了。 這套標(biāo)準(zhǔn)叫做美國(guó)信息交換標(biāo)準(zhǔn)碼(American Standard Code for Information Interchange),簡(jiǎn)稱ASCII。 后來(lái),電腦從美國(guó)傳到了其他國(guó)家,像法國(guó)或者德國(guó)這些國(guó)家的語(yǔ)言里還有一些非英文字母,ASCII編碼方案就不夠用了。 不過(guò)沒(méi)關(guān)系,ASCII第一位統(tǒng)一都是0,只用了256種組合中的前128種。這些國(guó)家就在ASCII的基礎(chǔ)上,從第129種組合開(kāi)始擴(kuò)展自己的編碼體系,把新增的符號(hào)定義為1開(kāi)頭的字節(jié),這樣就把ASCII的容量擴(kuò)充了一倍。 這些國(guó)家擴(kuò)展的規(guī)則是不一樣的,同樣一個(gè)字節(jié),在阿拉伯或者俄羅斯的ASCII擴(kuò)展中代表不同的字母。 大家基本上是各用各的標(biāo)準(zhǔn),有得用總比沒(méi)得用強(qiáng),也還算是開(kāi)心。 但也有其他人不開(kāi)心。 比如中國(guó),常用漢字有幾千個(gè),加上生僻字和少數(shù)民族語(yǔ)言符號(hào)有幾萬(wàn)個(gè),區(qū)區(qū)256種組合怎么夠用? 沒(méi)辦法,我們只好自己開(kāi)發(fā)一套編碼規(guī)則,不使用8位的單字節(jié),而是使用16位的雙字節(jié)來(lái)表達(dá)一個(gè)符號(hào)。這樣我們就有2的16次方=6萬(wàn)多種組合可以用了。 中國(guó)的編碼標(biāo)準(zhǔn)從最早的GB2312,一直發(fā)展到最新的GB18030,從幾千個(gè)常用漢字?jǐn)U充到幾萬(wàn)個(gè)符號(hào)。 為了解決中英文混合問(wèn)題,GB系列編碼也必須向下兼容ASCII編碼才行, GB編碼標(biāo)準(zhǔn)規(guī)定:凡是以0開(kāi)頭的字節(jié),都被認(rèn)為是ASCII編碼中的英文字符,凡是以1開(kāi)頭的字節(jié),就告訴計(jì)算機(jī)還沒(méi)完,得把下一個(gè)字節(jié)也算進(jìn)來(lái),組合起來(lái)表達(dá)一個(gè)漢字。 比如「S型人格」編碼就是下面這樣: 不過(guò),這種雙字節(jié)中文字符和單字節(jié)英文字符并存的編碼方式,會(huì)帶來(lái)一個(gè)新麻煩:使用GB系列的編程人員需要萬(wàn)分小心,一旦弄錯(cuò)了一個(gè)字節(jié),很可能后邊跟著的所有文字就全錯(cuò)了。 比如「S型人格」的二進(jìn)制編碼,如果把第一個(gè)字節(jié)中的第一位0替換成1,其他不變,即便只錯(cuò)了一個(gè)數(shù)字,也會(huì)導(dǎo)致一串編碼全部錯(cuò)誤。 這種情況在單字節(jié)的ASCII里是不會(huì)出現(xiàn)的。 如果說(shuō)編程上的容錯(cuò)性可以通過(guò)我們辛勤的本土工程師來(lái)解決,那更大的麻煩還在后面。 霸氣的「終極語(yǔ)言編碼」 到這個(gè)時(shí)候,世界上的編碼體系已經(jīng)很混亂了。 非英語(yǔ)國(guó)家對(duì)ASCII碼用各自的方法擴(kuò)充,同樣的字節(jié)代表不同的符號(hào),中國(guó)這樣的國(guó)家還用單雙字節(jié)混編,甚至大陸和臺(tái)灣的編碼規(guī)則都互相沖突。 這對(duì)于跨國(guó)軟件公司和互聯(lián)網(wǎng)發(fā)展都是非常不方便的,使用軟件或者訪問(wèn)網(wǎng)站,必須事先安裝對(duì)應(yīng)地區(qū)的編碼系統(tǒng),否則就會(huì)出現(xiàn)亂碼。 這時(shí)候國(guó)際標(biāo)準(zhǔn)化組織ISO站出來(lái)說(shuō):都別鬧了,我來(lái)制定一個(gè)大一統(tǒng)的編碼規(guī)則吧! 這套編碼規(guī)則俗稱Unicode,囊括了地球上所有文化的符號(hào)。因?yàn)楦鞯貐^(qū)的編碼已經(jīng)出現(xiàn)了沖突,大一統(tǒng)編碼已經(jīng)不能兼容不同國(guó)家現(xiàn)有的編碼了。 ISO的做法很暴力:除了對(duì)ASCII向下兼容,其他的編碼統(tǒng)統(tǒng)廢除,重新編。 16位的雙字節(jié)編碼只能組合出6萬(wàn)多種可能,要做到大一統(tǒng)也不夠用。沒(méi)關(guān)系,再加位數(shù),加到32位的四字節(jié)編碼,排列組合高達(dá)42億種。這下用到宇宙文明統(tǒng)一也沒(méi)問(wèn)題了。 不過(guò),舊麻煩的解決總是會(huì)帶來(lái)新麻煩。 首先就是儲(chǔ)存效率問(wèn)題。 對(duì)于歐美國(guó)家來(lái)說(shuō),本來(lái)用一個(gè)8位字節(jié)能解決的事,為了兼容其他語(yǔ)言,硬生生的要用雙字節(jié)甚至4字節(jié)來(lái)編碼,比如ASCII中字母S的編碼是「01010011」,到了Unicode里就要把前面的空位用一串0補(bǔ)足。 這樣,本來(lái)用1個(gè)G能儲(chǔ)存的文件,變成4字節(jié)的Unicode碼之后就會(huì)變成4個(gè)G。 更大的問(wèn)題是網(wǎng)絡(luò)傳輸問(wèn)題。 在Unicode編碼發(fā)明的時(shí)候,網(wǎng)速還是很慢的。如果一次傳輸4個(gè)字節(jié),效率就是單字節(jié)的四分之一。 想想你花錢(qián)買(mǎi)了20M的寬帶,因?yàn)閾Q了個(gè)編碼系統(tǒng),變成了5M的速度,擱誰(shuí)也不干啊。 所以Unicode編碼在當(dāng)時(shí)遭到了英文國(guó)家的強(qiáng)烈抵制。 為了解決這個(gè)問(wèn)題,人們又發(fā)明了Unicode編碼轉(zhuǎn)換格式(Unicode Transformation Format),簡(jiǎn)稱UTF,來(lái)規(guī)定Unicode編碼的儲(chǔ)存和傳輸方式。 它分為UTF-8、UTF-16、UTF-32等等,顧名思義,UTF-32表示一次傳輸32位、4個(gè)字節(jié),UTF-8就表示一次傳輸8位、一個(gè)字節(jié)。 其中,UTF-8效率最高,最為常用。 既然UTF-8是一次傳輸一個(gè)字節(jié),計(jì)算機(jī)怎么知道當(dāng)前這個(gè)字節(jié)是完整表達(dá)了一個(gè)含義,還是后邊還跟著其他字節(jié)呢? UTF-8是變長(zhǎng)度編碼,根據(jù)符號(hào)在Unicode中所在的編碼位置,定義了不同的字節(jié)長(zhǎng)度模板: 如果一個(gè)符號(hào)在Unicode碼中占前127位,只需要一個(gè)字節(jié)就能表示,對(duì)應(yīng)的二進(jìn)制是0開(kāi)頭的8位數(shù)字,那就直接傳輸這個(gè)字節(jié),并在這個(gè)字節(jié)結(jié)束,不需要前面再補(bǔ)0了。 也就是說(shuō),英文語(yǔ)言使用UTF-8和ASCII是一模一樣的。 位數(shù)增大,一個(gè)字節(jié)不夠用了,就套用這樣一個(gè)雙字節(jié)模板:第一個(gè)字節(jié)以110開(kāi)頭,第二個(gè)字節(jié)以10開(kāi)頭,告訴計(jì)算機(jī),這兩個(gè)字節(jié)需要組合起來(lái)共同表達(dá)一個(gè)符號(hào)。下圖中紅色的部分就是強(qiáng)制規(guī)定的模板數(shù)字。 位數(shù)繼續(xù)增大,兩個(gè)字節(jié)也不夠用了,就再套用一個(gè)三字節(jié)模板:第一個(gè)字節(jié)以1110開(kāi)頭,后面兩個(gè)字節(jié)還是以10開(kāi)頭,告訴計(jì)算機(jī),這是一個(gè)三字節(jié)組合的符號(hào)。 以此類(lèi)推,四個(gè)字節(jié)的模板就是:第一個(gè)字節(jié)以11110開(kāi)頭,后邊再跟著三個(gè)以10開(kāi)頭的字節(jié)。 這樣,我們就解決了不同語(yǔ)言之間編碼兼容的問(wèn)題,又解決了低位數(shù)編碼的傳輸效率問(wèn)題。 當(dāng)一個(gè)文件以英文為主的時(shí)候,UTF-8的效率非常接近ASCII。不過(guò)對(duì)于中文來(lái)說(shuō),漢字用GB碼只需要兩個(gè)字節(jié),到了UTF-8里卻需要用3個(gè)字節(jié)來(lái)表達(dá)(因?yàn)樯蠄D中紅色的模板數(shù)字占去了4+2+2=8位),所以純中文的網(wǎng)站用UTF-8比用GB碼傳輸起來(lái)效率要低一些。 但前面我們說(shuō)過(guò),GB碼中英文混排的時(shí)候,會(huì)因?yàn)榕e(cuò)或者丟失一個(gè)字節(jié),導(dǎo)致后邊的所有文字全都錯(cuò)誤。而UTF-8在多字節(jié)組合的時(shí)候有一套嚴(yán)格的模板,中間一個(gè)字節(jié)出現(xiàn)了錯(cuò)誤,亂碼不會(huì)擴(kuò)散,比GB碼多了容錯(cuò)性的優(yōu)勢(shì)。 此外,使用UTF-8,其他國(guó)家的人不需要安裝中文編碼規(guī)則,也不會(huì)出現(xiàn)亂碼。所以國(guó)內(nèi)的新網(wǎng)站更偏愛(ài)使用UTF-8。 因?yàn)閁TF-8和GB碼兩者是完全不兼容的,所以一些老牌中文軟件和網(wǎng)站出于轉(zhuǎn)化成本的考慮,還是沿用GB系列的編碼。 說(shuō)到這兒,我們就能解釋前邊那個(gè)記事本「聯(lián)通」兩個(gè)字亂碼的現(xiàn)象了。記事本在打開(kāi)一個(gè)文檔的時(shí)候,不會(huì)問(wèn)你是用什么格式儲(chǔ)存的,而是通過(guò)你輸入文字的代碼來(lái)「猜」它的編碼格式。 在我們輸入中文的時(shí)候,記事本默認(rèn)使用的是GB編碼,我們看「聯(lián)通」兩個(gè)字對(duì)應(yīng)的GB碼: 注意看紅色部分,是不是和UTF-8的雙字節(jié)模板正好一模一樣?所以當(dāng)你默認(rèn)保存再打開(kāi)的時(shí)候,記事本通過(guò)這兩行代碼,猜測(cè)這個(gè)文檔用的是UTF-8格式,而UTF-8和GB編碼是不兼容的,于是就出現(xiàn)了亂碼。 你可以試試,在存有「聯(lián)通」的記事本文件另存的時(shí)候,選擇用UTF-8格式保存,或者多打幾個(gè)字,再打開(kāi)就不會(huì)出現(xiàn)亂碼了。 好了,總結(jié)一下今天說(shuō)到的幾個(gè)知識(shí)點(diǎn): ● 計(jì)算機(jī)無(wú)法理解自然語(yǔ)言,需要轉(zhuǎn)化成二進(jìn)制編碼; ● 英文和數(shù)字在轉(zhuǎn)化的時(shí)候效率最高,只需要用到8位的單字節(jié)編碼ASCII; ● 不同地區(qū)各自設(shè)計(jì)編碼,遲早會(huì)在交流中遇到問(wèn)題,大一統(tǒng)編碼勢(shì)在必行; ● 編碼規(guī)則中,某一個(gè)符號(hào)必須嚴(yán)格對(duì)應(yīng)一個(gè)二進(jìn)制代碼,否則就會(huì)出現(xiàn)混亂; ● 新編碼規(guī)則不占用舊編碼的代碼,且保留原來(lái)的一一對(duì)應(yīng)關(guān)系,它就是向下兼容舊編碼的; ● 新編碼如果不兼容舊編碼,就會(huì)產(chǎn)生替換成本,從而引發(fā)一系列歷史遺留問(wèn)題; ● 為解決一個(gè)麻煩創(chuàng)造新的編碼,經(jīng)常也會(huì)帶來(lái)新的麻煩; ● 編碼的簡(jiǎn)潔高效與可擴(kuò)展性,往往不可兼得。 下一期開(kāi)始,我們的建筑信息編碼就要正式登場(chǎng)了。你不妨先思考一個(gè)問(wèn)題: 如果編碼只需要考慮語(yǔ)言兼容的問(wèn)題,為什么光是北美地區(qū)就先后出現(xiàn)了Masterformat、Uniformat、Omniclass三種建筑編碼體系?比起語(yǔ)言編碼,建筑編碼是不是有更復(fù)雜的問(wèn)題需要解決呢? 歡迎你把疑問(wèn)和對(duì)編碼知識(shí)的見(jiàn)解留言給我們,我們會(huì)把你的高見(jiàn)和我們的回答補(bǔ)充到后面的連載內(nèi)容里。 有態(tài)度,有深度,BIMBOX,咱們下次見(jiàn)!
文章分類(lèi):
BIMBOX理論知識(shí)
|