程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JAVA及相干字符集編碼成績研討分享

JAVA及相干字符集編碼成績研討分享

編輯:關於JAVA

JAVA及相干字符集編碼成績研討分享。本站提示廣大學習愛好者:(JAVA及相干字符集編碼成績研討分享)文章只能為提供參考,不一定能成為您想要的結果。以下是JAVA及相干字符集編碼成績研討分享正文


上面本文將針對以上幾點成績停止描寫評論辯論,我們就以“中文”兩個字為例來講明,查找相干材料可知“中文”的GB2312編碼是“d6d0 cec4”,為Unicode編碼為"4e2d 6587",UTF編碼就是"e4b8ad e69687"。(留意,“中文”這兩個字沒有iso8859-1編碼,但可以用iso8859-1編碼來"表現")。

1、編碼根本常識:

最早的編碼是iso8859-1,和ascii編碼類似。但為了便利表現各類各樣的說話,逐步湧現了許多尺度編碼,主要的有以下幾個:

1. iso8859-1

屬於單字節編碼,最多能表現的字符規模是0-255,運用於英文系列。好比,字母a的編碼為0x61=97。

很顯著,iso8859-1編碼表現的字符規模很窄,沒法表現中文字符。然則,因為是單字節編碼,和盤算機最基本的表現單元分歧,所以許多時刻,仍然應用iso8859-1編碼來表現。並且在許多協定上,默許應用該編碼。好比,固然"中文"兩個字不存在iso8859-1編碼,以gb2312編碼為例,應當是"d6d0 cec4"兩個字符,應用iso8859-1編碼的時刻則將它拆開為4個字節來表現:"d6 d0 ce c4"(現實上,在停止存儲的時刻,也是以字節為單元處置的)。而假如是UTF編碼,則是6個字節"e4 b8 ad e6 96 87"。很顯著,這類表現辦法還須要以另外一種編碼為基本。

2. GB2312/GBK

這就是漢子的國標碼,專門用來表現漢字,是雙字節編碼,而英文字母和iso8859-1分歧(兼容iso8859-1編碼)。個中gbk編碼可以或許用來同時表現繁體字和簡體字,而gb2312只能表現簡體字,gbk是兼容gb2312編碼的。

3. unicode

這是最同一的編碼,可以用來表現一切說話的字符,並且是定長雙字節(也有四字節的)編碼,包含英文字母在內。所以可以說它是不兼容iso8859-1編碼的,也不兼容任何編碼。不外,絕對於iso8859-1編碼來講,uniocode編碼只是在後面增長了一個0字節,好比字母a為"00 61"。

須要解釋的是,定長編碼便於盤算機處置(留意GB2312/GBK不是定長編碼),而unicode又可以用來表現一切字符,所以在許多軟件外部是應用unicode編碼來處置的,好比java。

4. UTF

斟酌到unicode編碼不兼容iso8859-1編碼,並且輕易占用更多的空間:由於關於英文字母,unicode也須要兩個字節來表現。所以unicode未便於傳輸和存儲。是以而發生了utf編碼,utf編碼兼容iso8859-1編碼,同時也能夠用來表現一切說話的字符,不外,utf編碼是不定長編碼,每個字符的長度從1-6個字節不等。別的,utf編碼自帶簡略的校驗功效。普通來說,英文字母都是用一個字節表現,而漢字應用三個字節。

留意,固然說utf是為了應用更少的空間而應用的,但那只是絕對於unicode編碼來講,假如曾經曉得是漢字,則應用GB2312/GBK無疑是最節儉的。不外另外一方面,值得解釋的是,固然utf編碼對漢字應用3個字節,但即便關於漢字網頁,utf編碼也會比unicode編碼節儉,由於網頁中包括了許多的英文字符。

2、java對字符的處置

在編寫java運用法式中,會有多處觸及到字符集編碼,有些處所須要停止准確的設置,有些處所須要停止必定水平的處置。

1. getBytes(charset)

這是java字符串處置的一個尺度函數,其感化是將字符串所表現的字符依照charset編碼,並以字節方法表現。留意字符串在java內存中老是按unicode編碼存儲的。好比"中文",正常情形下(即沒有毛病的時刻)存儲為"4e2d 6587",假如charset為"gbk",則被編碼為"d6d0 cec4",然後前往字節"d6 d0 ce c4"。假如charset為"utf8"則最初是"e4 b8 ad e6 96 87"。假如是"iso8859-1",則因為沒法編碼,最初前往 "3f 3f"(注: "3f 3f"是兩個問號)。

2. new String(charset)

這是java字符串處置的另外一個尺度函數,和上一個函數的感化相反,將字節數組依照charset編碼停止組合辨認,最初轉換為unicode存儲。參考上述getBytes的例子,"gbk" 和"utf8"都可以得出准確的成果"4e2d 6587",但iso8859-1最初釀成了"003f 003f"(兩個問號)。

由於utf8可以用來表現/編碼一切字符,所以new String( str.getBytes( "utf8" ), "utf8" ) === str,即完整可逆。

3. setCharacterEncoding()

該函數用來設置http要求或許響應的編碼。

關於request,是指提交內容的編碼,指定後可以經由過程getParameter()則直接取得准確的字符串,假如不指定,則默許應用iso8859-1編碼,須要進一步處置。拜見下述"表單輸出"。值得留意的是在履行setCharacterEncoding()之前,不克不及履行任何getParameter()。java doc上解釋:This method must be called prior to reading request parameters or reading input using getReader()。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved