關於unicode不能不知道的知識

2021-04-06 20:01:42 字數 1400 閱讀 4373

在計算機出現的中後期,人們開發了unix,並為無重音英語字母開發了一套稱為ascii的編碼,它能夠使用32到127之間的數字表示各個字元,空格是32。由於那個時期生產的大多數計算機使用8位大小的位元組,因此使用者不僅可以存放所有可能的ascii字元,而且還有整整一位空餘下來。他們想可以把128~255之間的編碼用作個人的應用目的。

然而,亞洲國家的字元表有成千上萬個字元,是無法用8位二進位制來表示的。這時,unicode就問世了。

一些人錯誤的認為,unicode就是一種每個字元占用16個二進位制位,從而可以表示65536個可能的字元的16位編碼方案。這個並不十分正確,它是關於unicode的唯一最為流行的神話。

在unicode中,乙個字母對映為一種稱作**點(code point)的物件。unicode組織為各種字母表中每個理想化的字母分配乙個神奇的編號,其書寫形式為u+0645,這個神奇的編號稱為乙個**點。u+的含義是「unicode」,這些數字是16進製制的,在windows xp的charmap工具可以找到所有的字母及其編碼。

unicode能夠定義的字母個數其實沒有限制。我們來看乙個字串:hello該字串在unicode中對應的5個**點:

u+0048 u+0065 u+006c u+006c u+006f

關於unicode編碼,最為容易同時也因此導致2位元組神話出現的想法是:「嗨,讓我們將這些編碼各自用兩個位元組存放吧!」於是,「hello」變成了

00 48 00 65 00 6c 00 6c 00 6f

曾幾何時,這樣的做法好像是足夠好了。可是,程式設計師卻一直沒有停止抱怨:「瞧瞧那些所有的零!」要知道,作為美國人,他們閱讀的英語文字很少用到u+00ff以上的**點。

於是乎,光彩照人的utf-8概念就出現了。它是另外一種存放字串的unicode**點的體系,它在記憶體中使用8位位元組存放那些神奇的u+編號。在utf-8中,從0~127的每個**點存放在單個位元組裡面,只是128以上的**點才使用2個位元組、3個位元組,乃至多達6個位元組的空間來進行儲存。這樣在utf-8中,前128個字元與美國人的習慣一樣,他們永遠不會意識到有什麼異樣。

iso-8859-1,即latin-1是一種流行的英語文字編碼方案。

請記住:有乙個字串,而不知道它所使用的編碼方案是毫無意義的。

---------摘自《joel說軟體(joel on software)》

jsp中訪問資料庫的時候會顯示亂碼,可以通過以下辦法解決:

將寫入資料庫的中文轉換為從iso 8859-1編碼格式到gbk編碼格式,實現方法:

string str = new string(dbstr.getbytes("iso 8859-1"),"gbk");

讀出資料庫的中文將其從gbk編碼格式轉換為iso 8859-1編碼格式,實現:

string str = new string(dbstr.getbytes("gbk"),"iso 8859-1")

你不能不知道到的Hook!

hook是什麼?hook翻譯之後是鉤子的意思,hook的用途主要是用來攔截訊息的,看到這裡大家可能會迷茫,what is a hook?所以這時就不得不普及一下作業系統的原理。舉個例子 假如你是一名遊戲熱衷者,在玩遊戲時,你要釋放技能那麼你就會對鍵盤滑鼠進行操作,表面上你是直接操作遊戲,其實中間經過...

Linux 你不能不知道的小知識

1.在命令列中開啟 display 2.在命令列中開啟pdf,word,ppt等 gnome open 或者xdg open 3.在命令列中開啟檔案的圖形介面 nautilus 4.游標掉轉終端命令的最前端 ctrl a 最後 ctrl e 去掉前乙個空格後面的命令 ctrl w 5.vim 沒有許...

擁抱「多雲」,企業不能不知道的事兒 !

作者簡介 本文作者 emil sayegh 被公認為雲計算先驅。他推出並領導了惠普 rackspace codero 的雲計算和託管業務,並因此備受讚譽,現在擔任 hostway 的總裁兼首席執行官。翻譯 omega 編譯 w 對於大多數企業來說,2018 這一年面臨新的技術挑戰,而且企業戰略也有可...