日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 字符串指定编码输出_java对字符的编码处理

發布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 字符串指定编码输出_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"(兩個問號)。

java?? .class類的編碼為:unicode;

windows 默認的編碼為:中文:gb2312; 英文:iso8859;String str = "張三" ;

byte[] jiema= str.getBytes("gb2312") ; //解碼

String bianma = new String(jiema,"UTF-8");//編碼 如果上面的解碼不對 可能出現問題

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編碼(因為iso8859-1有很多的字符不能表示,因此會成為亂碼),需要進一步處理。參見下述"表單輸入".值得注意的是在執行setCharacterEncoding()之前,不能執行任何getParameter()。java doc上說明:This

method must be called prior to reading request parameters or reading input using getReader()。而且,該指定只對POST方法有效,對GET方法無效。分析原因,應該是在執行第一個getParameter()的時候,java將會按照編碼分析所有的提交內容,而后續的getParameter()不再進行分析,所以setCharacterEncoding()無效。而對于GET方法提交表單是,提交的內容在URL中,一開始就已經按照編碼分析所有的提交內容,setCharacterEncoding()自然就無效(所以應該在提交的時候就使用utf-8進行編碼,這樣getParameter的時候再解碼就ok了)。

對于response,則是指定輸出內容的編碼,同時,該設置會傳遞給瀏覽器,告訴瀏覽器輸出內容所采用的編碼。

4. 處理過程

下面分析兩個有代表性的例子,說明java對編碼有關問題的處理方法。

4.1. 表單輸入

User input *(gbk:d6d0 cec4) browser *(gbk:d6d0 cec4) web server iso8859-1(00d6 00d0 00ce 00c4) class,需要在class中進行處理:getbytes("iso8859-1")為d6 d0 ce c4,new String("gbk")為d6d0 cec4,內存中以unicode編碼則為4e2d 6587.

l 用戶輸入的編碼方式和頁面指定的編碼有關,也和用戶的操作系統有關,所以是不確定的,上例以gbk為例。

l 從browser到web server,可以在表單中指定提交內容時使用的字符集,否則會使用頁面指定的編碼。而如果在url中直接用?的方式輸入參數(即get方法),則其編碼往往是操作系統本身的編碼,因為這時和頁面無關。上述仍舊以gbk編碼為例。

l?Web server接收到的是字節流,默認時(getParameter)會以iso8859-1編碼處理之,結果是不正確的,所以需要進行處理。但如果預先設置了編碼(通過request. setCharacterEncoding ()),則能夠直接獲取到正確的結果。

l 在頁面中指定編碼是個好習慣,否則可能失去控制,無法指定正確的編碼,通常指定為utf-8。

4.2. 文件編譯

假設文件是gbk編碼保存的,而編譯有兩種編碼選擇:gbk或者iso8859-1,前者是中文windows的默認編碼,后者是linux的默認編碼,當然也可以在編譯時指定編碼。

Jsp *(gbk:d6d0 cec4) java file *(gbk:d6d0 cec4) compiler read uincode(gbk: 4e2d 6587; iso8859-1: 00d6 00d0 00ce 00c4) compiler write utf(gbk: e4b8ad e69687; iso8859-1: *) compiled file unicode(gbk: 4e2d 6587; iso8859-1: 00d6 00d 000ce 00c4) class.所以用gbk編碼保存,而用iso8859-1編譯的結果是不正確的。

class unicode(4e2d 6587) system.out / jsp.out gbk(d6d0 cec4) os console / browser.

l 文件可以以多種編碼方式保存,中文windows下,默認為ansi/gbk.

l 編譯器讀取文件時,需要得到文件的編碼,如果未指定,則使用系統默認編碼。一般class文件,是以系統默認編碼保存的,所以編譯不會出問題,但對于jsp文件,如果在中文windows下編輯保存,而部署在英文linux下運行/編譯,則會出現問題。所以需要在jsp文件中用pageEncoding指定編碼。

l Java編譯的時候會轉換成統一的unicode編碼處理,最后保存的時候再轉換為utf編碼。

l 當系統輸出字符的時候,會按指定編碼輸出,對于中文windows下,System.out將使用gbk編碼,而對于response(瀏覽器),則使用jsp文件頭指定的contentType,或者可以直接為response指定編碼。同時,會告訴browser網頁的編碼。如果未指定,則會使用iso8859-1編碼。對于中文,應該為browser指定輸出字符串的編碼。

l browser顯示網頁的時候,首先使用response中指定的編碼(jsp文件頭指定的contentType最終也反映在response上),如果未指定,則會使用網頁中meta項指定中的contentType.

5. 幾處設置

對于web應用程序,和編碼有關的設置或者函數如下。

5.1. jsp編譯

指定文件的存儲編碼,很明顯,該設置應該置于文件的開頭。例如:charset=utf-8。另外,對于一般class文件,可以在編譯的時候指定編碼。

5.2. jsp輸出

指定文件輸出到browser是使用的編碼,該設置也應該置于文件的開頭。例如:。該設置和response.setCharacterEncoding("GBK")等效。

5.3. meta設置

指定網頁使用的編碼,該設置對靜態網頁尤其有作用。因為靜態網頁無法采用jsp的設置,而且也無法執行response.setCharacterEncoding()。例如:

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

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

5.4. form設置

當瀏覽器提交表單的時候,可以指定相應的編碼。例如:URLEncoder.encode(key, "utf-8"))。一般不必不使用該設置,瀏覽器會直接使用網頁的編碼。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

首先介紹兩種字符集 gb2312 和 gbk

。gb2312 簡體中文編碼

。gbk??? 中文字符編碼 包括繁體中文

1. 指定jsp文件里內容的的編碼方式

2. 指定html文件里內容的編碼方式

3. 當響應用戶的請求時,輸出到用戶瀏覽器上的編碼方式

相當于生成的代碼 response.setContentType("text/html; charset=gb2312");

4. 把用戶傳遞過來的參數作為指定的編碼

request.setCharacterEncoding("gb2312");

5. 對比

request.setCharacterEncoding("gb2312");?????????????? //設置輸入編碼格式

response.setContentType("text/html; charset=gb2312"); //設置輸出編碼格式

總結

以上是生活随笔為你收集整理的java 字符串指定编码输出_java对字符的编码处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。