真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java設置字符集代碼 java語言使用的字符碼集是什么

Java 如何設置打開文件內容的字符集

3.5.3. meta設置

成都創(chuàng)新互聯(lián)是網(wǎng)站建設專家,致力于互聯(lián)網(wǎng)品牌建設與網(wǎng)絡營銷,專業(yè)領域包括網(wǎng)站設計制作、成都做網(wǎng)站、電商網(wǎng)站制作開發(fā)、小程序開發(fā)、微信營銷、系統(tǒng)平臺開發(fā),與其他網(wǎng)站設計及系統(tǒng)開發(fā)公司不同,我們的整合解決方案結合了恒基網(wǎng)絡品牌建設經(jīng)驗和互聯(lián)網(wǎng)整合營銷的理念,并將策略和執(zhí)行緊密結合,且不斷評估并優(yōu)化我們的方案,為客戶提供全方位的互聯(lián)網(wǎng)品牌整合方案!

指定網(wǎng)頁使用的編碼,該設置對靜態(tài)網(wǎng)頁尤其有作用。因為靜態(tài)網(wǎng)頁無法采用jsp的設置,而且也無法執(zhí)行response.setCharacterEncoding()。例如:META http-equiv="Content-Type" content="text/html; charset=GBK" /

如果同時采用了jsp輸出和meta設置兩種編碼指定方式,則jsp指定的優(yōu)先。因為jsp指定的直接體現(xiàn)在response中。

需要注意的是,apache有一個設置可以給無編碼指定的網(wǎng)頁指定編碼,該指定等同于jsp的編碼指定方式,所以會覆蓋靜態(tài)網(wǎng)頁中的meta指定。所以有人建議關閉該設置。

3.5.4. form設置

當瀏覽器提交表單的時候,可以指定相應的編碼。例如:form accept-charset= "gb2312"。一般不必不使用該設置,瀏覽器會直接使用網(wǎng)頁的編碼。

4. 系統(tǒng)軟件

下面討論幾個相關的系統(tǒng)軟件。

4.1. mysql數(shù)據(jù)庫

很明顯,要支持多語言,應該將數(shù)據(jù)庫的編碼設置成utf或者unicode,而utf更適合與存儲。但是,如果中文數(shù)據(jù)中包含的英文字母很少,其實unicode更為適合。

數(shù)據(jù)庫的編碼可以通過mysql的配置文件設置,例如default-character-set=utf8。還可以在數(shù)據(jù)庫鏈接URL中設置,例如: useUnicode=truecharacterEncoding=UTF-8。注意這兩者應該保持一致,在新的sql版本里,在數(shù)據(jù)庫鏈接URL里可以不進行設置,但也不能是錯誤的設置。

4.2. apache

appache和編碼有關的配置在httpd.conf中,例如AddDefaultCharset UTF-8。如前所述,該功能會將所有靜態(tài)頁面的編碼設置為UTF-8,最好關閉該功能。

另外,apache還有單獨的模塊來處理網(wǎng)頁響應頭,其中也可能對編碼進行設置。

4.3. linux默認編碼

這里所說的linux默認編碼,是指運行時的環(huán)境變量。兩個重要的環(huán)境變量是LC_ALL和LANG,默認編碼會影響到java URLEncode的行為,下面有描述。

建議都設置為"zh_CN.UTF-8"。

4.4. 其它

為了支持中文文件名,linux在加載磁盤時應該指定字符集,例如:mount /dev/hda5 /mnt/hda5/ -t ntfs -o iocharset=gb2312。

另外,如前所述,使用GET方法提交的信息不支持request.setCharacterEncoding(),但可以通過tomcat的配置文件指定字符集,在tomcat的server.xml文件中,形如:Connector ... URIEncoding="GBK"/。這種方法將統(tǒng)一設置所有請求,而不能針對具體頁面進行設置,也不一定和browser使用的編碼相同,所以有時候并不是所期望的。

5. URL地址

URL地址中含有中文字符是很麻煩的,前面描述過使用GET方法提交表單的情況,使用GET方法時,參數(shù)就是包含在URL中。

5.1. URL編碼

對于URL中的一些特殊字符,瀏覽器會自動進行編碼。這些字符除了"/?"等外,還包括unicode字符,比如漢子。這時的編碼比較特殊。

IE有一個選項"總是使用UTF-8發(fā)送URL",當該選項有效時,IE將會對特殊字符進行UTF-8編碼,同時進行URL編碼。如果改選項無效,則使用默認編碼"GBK",并且不進行URL編碼。但是,對于URL后面的參數(shù),則總是不進行編碼,相當于UTF-8選項無效。比如"中文.html?a=中文",當UTF-8選項有效時,將發(fā)送鏈接"%e4%b8%ad%e6%96%87.html?a=\x4e\x2d\x65\x87";而UTF-8選項無效時,將發(fā)送鏈接"\x4e\x2d\x65\x87.html?a=\x4e\x2d\x65\x87"。注意后者前面的"中文"兩個字只有4個字節(jié),而前者卻有18個字節(jié),這主要時URL編碼的原因。

當web server(tomcat)接收到該鏈接時,將會進行URL解碼,即去掉"%",同時按照ISO8859-1編碼(上面已經(jīng)描述,可以使用URLEncoding來設置成其它編碼)識別。上述例子的結果分別是"\ue4\ub8\uad\ue6\u96\u87.html?a=\u4e\u2d\u65\u87"和"\u4e\u2d\u65\u87.html?a=\u4e\u2d\u65\u87",注意前者前面的"中文"兩個字恢復成了6個字符。這里用"\u",表示是unicode。

所以,由于客戶端設置的不同,相同的鏈接,在服務器上得到了不同結果。這個問題不少人都遇到,卻沒有很好的解決辦法。所以有的網(wǎng)站會建議用戶嘗試關閉UTF-8選項。不過,下面會描述一個更好的處理辦法。

5.2. rewrite

熟悉的人都知道,apache有一個功能強大的rewrite模塊,這里不描述其功能。需要說明的是該模塊會自動將URL解碼(去除%),即完成上述web server(tomcat)的部分功能。有相關文檔介紹說可以使用[NE]參數(shù)來關閉該功能,但我試驗并未成功,可能是因為版本(我使用的是apache 2.0.54)問題。另外,當參數(shù)中含有"? "等符號的時候,該功能將導致系統(tǒng)得不到正常結果。

rewrite本身似乎完全是采用字節(jié)處理的方式,而不考慮字符串的編碼,所以不會帶來編碼問題。

5.3. URLEncode.encode()

這是Java本身提供對的URL編碼函數(shù),完成的工作和上述UTF-8選項有效時瀏覽器所做的工作相似。值得說明的是,java已經(jīng)不贊成不指定編碼來使用該方法(deprecated)。應該在使用的時候增加編碼指定。

當不指定編碼的時候,該方法使用系統(tǒng)默認編碼,這會導致軟件運行結果得不確定。比如對于"中文",當系統(tǒng)默認編碼為"gb2312"時,結果是"%4e%2d%65%87",而默認編碼為"UTF-8",結果卻是"%e4%b8%ad%e6%96%87",后續(xù)程序將難以處理。另外,這兒說的系統(tǒng)默認編碼是由運行tomcat時的環(huán)境變量LC_ALL和LANG等決定的,曾經(jīng)出現(xiàn)過tomcat重啟后就出現(xiàn)亂碼的問題,最后才郁悶的發(fā)現(xiàn)是因為修改修改了這兩個環(huán)境變量。

建議統(tǒng)一指定為"UTF-8"編碼,可能需要修改相應的程序。

5.4. 一個解決方案

上面說起過,因為瀏覽器設置的不同,對于同一個鏈接,web server收到的是不同內容,而軟件系統(tǒng)有無法知道這中間的區(qū)別,所以這一協(xié)議目前還存在缺陷。

針對具體問題,不應該僥幸認為所有客戶的IE設置都是UTF-8有效的,也不應該粗暴的建議用戶修改IE設置,要知道,用戶不可能去記住每一個web server的設置。所以,接下來的解決辦法就只能是讓自己的程序多一點智能:根據(jù)內容來分析編碼是否UTF-8。

比較幸運的是UTF-8編碼相當有規(guī)律,所以可以通過分析傳輸過來的鏈接內容,來判斷是否是正確的UTF-8字符,如果是,則以UTF-8處理之,如果不是,則使用客戶默認編碼(比如"GBK"),下面是一個判斷是否UTF-8的例子,如果你了解相應規(guī)律,就容易理解。

public static boolean isValidUtf8(byte[] b,int aMaxCount){

int lLen=b.length,lCharCount=0;

for(int i=0;ilLen lCharCountaMaxCount;++lCharCount){

byte lByte=b[i++];//to fast operation, ++ now, ready for the following for(;;)

if(lByte=0) continue;//=0 is normal ascii

if(lByte(byte)0xc0 || lByte(byte)0xfd) return false;

int lCount=lByte(byte)0xfc?5:lByte(byte)0xf8?4

:lByte(byte)0xf0?3:lByte(byte)0xe0?2:1;

if(i+lCountlLen) return false;

for(int j=0;jlCount;++j,++i) if(b[i]=(byte)0xc0) return false;

}

return true;

}

相應地,一個使用上述方法的例子如下:

public static String getUrlParam(String aStr,String aDefaultCharset)

throws UnsupportedEncodingException{

if(aStr==null) return null;

byte[] lBytes=aStr.getBytes("ISO-8859-1");

return new String(lBytes,StringUtil.isValidUtf8(lBytes)?"utf8":aDefaultCharset);

}

不過,該方法也存在缺陷,如下兩方面:

l 沒有包括對用戶默認編碼的識別,這可以根據(jù)請求信息的語言來判斷,但不一定正確,因為我們有時候也會輸入一些韓文,或者其他文字。

l 可能會錯誤判斷UTF-8字符,一個例子是"學習"兩個字,其GBK編碼是" \xd1\xa7\xcf\xb0",如果使用上述isValidUtf8方法判斷,將返回true??梢钥紤]使用更嚴格的判斷方法,不過估計效果不大。

有一個例子可以證明google也遇到了上述問題,而且也采用了和上述相似的處理方法,比如,如果在地址欄中輸入";newwindow=1q=學習",google將無法正確識別,而其他漢字一般能夠正常識別。

最后,應該補充說明一下,如果不使用rewrite規(guī)則,或者通過表單提交數(shù)據(jù),其實并不一定會遇到上述問題,因為這時可以在提交數(shù)據(jù)時指定希望的編碼。另外,中文文件名確實會帶來問題,應該謹慎使用。

6. 其它

下面描述一些和編碼有關的其他問題。

6.1. SecureCRT

除了瀏覽器和控制臺與編碼有關外,一些客戶端也很有關系。比如在使用SecureCRT連接linux時,應該讓SecureCRT的顯示編碼(不同的session,可以有不同的編碼設置)和linux的編碼環(huán)境變量保持一致。否則看到的一些幫助信息,就可能是亂碼。

另外,mysql有自己的編碼設置,也應該保持和SecureCRT的顯示編碼一致。否則通過SecureCRT執(zhí)行sql語句的時候,可能無法處理中文字符,查詢結果也會出現(xiàn)亂碼。

對于Utf-8文件,很多編輯器(比如記事本)會在文件開頭增加三個不可見的標志字節(jié),如果作為mysql的輸入文件,則必須要去掉這三個字符。(用linux的vi保存可以去掉這三個字符)。一個有趣的現(xiàn)象是,在中文windows下,創(chuàng)建一個新txt文件,用記事本打開,輸入"連通"兩個字,保存,再打開,你會發(fā)現(xiàn)兩個字沒了,只留下一個小黑點。

6.2. 過濾器

如果需要統(tǒng)一設置編碼,則通過filter進行設置是個不錯的選擇。在filter class中,可以統(tǒng)一為需要的請求或者回應設置編碼。參加上述setCharacterEncoding()。這個類apache已經(jīng)給出了可以直接使用的例子SetCharacterEncodingFilter。

6.3. POST和GET

很明顯,以POST提交信息時,URL有更好的可讀性,而且可以方便的使用setCharacterEncoding()來處理字符集問題。但GET方法形成的URL能夠更容易表達網(wǎng)頁的實際內容,也能夠用于收藏。

從統(tǒng)一的角度考慮問題,建議采用GET方法,這要求在程序中獲得參數(shù)是進行特殊處理,而無法使用setCharacterEncoding()的便利,如果不考慮rewrite,就不存在IE的UTF-8問題,可以考慮通過設置URIEncoding來方便獲取URL中的參數(shù)。

6.4. 簡繁體編碼轉換

GBK同時包含簡體和繁體編碼,也就是說同一個字,由于編碼不同,在GBK編碼下屬于兩個字。有時候,為了正確取得完整的結果,應該將繁體和簡體進行統(tǒng)一??梢钥紤]將UTF、GBK中的所有繁體字,轉換為相應的簡體字,BIG5編碼的數(shù)據(jù),也應該轉化成相應的簡體字。當然,仍舊以UTF編碼存儲。

例如,對于"語言 ?言",用UTF表示為"\xE8\xAF\xAD\xE8\xA8\x80 \xE8\xAA\x9E\xE8\xA8\x80",進行簡繁體編碼轉換后應該是兩個相同的 "\xE8\xAF\xAD\xE8\xA8\x80"。

java輸入輸出流字符集怎么設

1. InputStream 和OutputStream,兩個是為字節(jié)流設計的,主要用來處理字節(jié)或二進制對象,

2. Reader和 Writer.兩個是為字符流(一個字符占兩個字節(jié))設計的,主要用來處理字符或字符串.

字符流處理的單元為2個字節(jié)的Unicode字符,分別操作字符、字符數(shù)組或字符串,而字節(jié)流處理單元為1個字節(jié),操作字節(jié)和字節(jié)數(shù)組。所以字符流是由Java虛擬機將字節(jié)轉化為2個字節(jié)的Unicode字符為單位的字符而成的,所以它對多國語言支持性比較好!如果是音頻文件、圖片、歌曲,就用字節(jié)流好點,如果是關系到中文(文本)的,用字符流好點

所有文件的儲存是都是字節(jié)(byte)的儲存,在磁盤上保留的并不是文件的字符而是先把字符編碼成字節(jié),再儲存這些字節(jié)到磁盤。在讀取文件(特別是文本文件)時,也是一個字節(jié)一個字節(jié)地讀取以形成字節(jié)序列

1,字節(jié)流可用于任何類型的對象,包括二進制對象,而字符流只能處理字符或者字符串;

2,字節(jié)流提供了處理任何類型的IO操作的功能,但它不能直接處理Unicode字符,而字符流就可以

字節(jié)流是最基本的,所有的InputStrem和OutputStream的子類都是,主要用在處理二進制數(shù)據(jù),它是按字節(jié)來處理的 但實際中很多的數(shù)據(jù)是文本,又提出了字符流的概念,它是按虛擬機的encode來處理,也就是要進行字符集的轉化 這兩個之間通過 InputStreamReader,OutputStreamWriter來關聯(lián),實際上是通過byte[]和String來關聯(lián) 在實際開發(fā)中出現(xiàn)的漢字問題實際上都是在字符流和字節(jié)流之間轉化不統(tǒng)一而造成的.

如何在JAVA中定義自己的字符集

java中定義一個字符串數(shù)組方式如下:

1.String[] str={"AAA","BBB","CCC"};

2.String str[]={"AAA","BBB","CCC"};

string類型和其他基本類型相似,創(chuàng)建數(shù)組時,有上述兩種方式。

eclipse怎么設置字符集編碼

1、 windows-Preferences...打開"首選項"對話框,左側導航樹,導航到general-Workspace,右側 Text file encoding,選擇Other,改變?yōu)?utf-8(必須小寫),以后新建立工程其屬性對話框中的Text file encoding即為UTF-8。

2、 windows-Preferences...打開"首選項"對話框,左側導航樹,導航到general-Content Types,右側Content Types樹,點開Text,選擇 Java Source File,在下面的Default encoding輸入框中輸入UTF-8,點Update,則設置Java文件編碼為UTF-8。然后設置jsp、js、css等類型的Default encoding,設置方式同Java Source File。

3.windows-Preferences...打開"首選項"對話框,左側導航樹,導航到MyEclipse-Files and Editors-JSP,把Encoding改為UTF-8


本文名稱:java設置字符集代碼 java語言使用的字符碼集是什么
文章源于:http://weahome.cn/article/docsghg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部