筆記心得編碼和解碼_第1頁
筆記心得編碼和解碼_第2頁
筆記心得編碼和解碼_第3頁
筆記心得編碼和解碼_第4頁
筆記心得編碼和解碼_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

問題一:在java中文件時應(yīng)該采用什么編碼Java文件的方式總體可以分為兩類:按字節(jié)和按字符。按字節(jié)讀取就是采用InputStream.read()方法來字節(jié),然后保存到一個byte[]數(shù)組藏了一個編碼的細節(jié),newString(byte[]);會使用操作系統(tǒng)默認的字符集來解碼字節(jié)數(shù)組,中文操作系統(tǒng)就是GBK。而我們從輸入流里 是GBK編碼的,因為從輸入流里的字節(jié)編碼取決于被 并保存。此時demo.txt編碼是ANSI,中文操作系統(tǒng)下就是GBK。此時我們用輸入字節(jié)流該文件所得到的字節(jié)就是使用GBK方式編碼的字節(jié)那么我們最終newString(byte[]);時采用平臺默認的GBK來編碼成String也是沒有問題的(字節(jié)編碼和默認一致)。試想一下,如果在保存demo.txt文件時,我們選擇UTF-8編碼,那么該文件的編碼就不在是ANSI了,而變成了UTF-8。仍然采UTF-8編碼的字節(jié)。兩次的字節(jié)顯然不一樣,一個很明顯的區(qū)別就是:GBK每個漢字兩個字節(jié),而UTF-8每個漢字三個字節(jié)。如何我們最后還使用new采用的默認GBK,而我們的字節(jié)是UTF-8字節(jié)。正確的辦法就是使用newOutputStreamoutnewFileOutputStream("d:\\demo.txt");demo.txtGBKGBK。如果UTF-8demo.txtUTF-8。這里還有一點,如果123abcasciigetBytes()getBytes(“UTF-8”)GBK這里可以總結(jié)一下,InputStreamOutputStream下面說說采用字符輸入流來文件,符。說起字符流,不得不提的就是InputStreamReader。以下是javaapi對它的說明:InputStreamReader是字節(jié)流通向字符流的橋梁:它使用指定的charset字節(jié)并將其為字符它使用的字符集可以由名稱指定或顯式給InputStreamReader在底層還是采用字節(jié)流來 ,方式,那么會采用操作系統(tǒng)默認的GBK來的字節(jié)。還用上面demo.txt的例子,假設(shè)demo.txt編碼方式為GBK,我們使用如下代碼來文件: in=newInputStreamReader(new編碼的,而InputStreamReader默認采用 也是GBK。如果把demo.txt編碼方式換成UTF-8,那么我們采用這種方式 in=newInputStreamReader(new給InputStreamReader指定編碼,這樣二者統(tǒng)一就不會出現(xiàn)亂碼了的。字符輸出流的主要類是:OutputStreamWriter。JavaapiOutputStreamWritercharsetGBKOutputStreamWriter:OutputStreamWriterout=newOutputStreamWriter(newUTF-8UTF-8javajavacjava通常我們手動建立一個java文件Demo.java,并保存。此時Demo.java文件的編碼為ANSI,中文操作系統(tǒng)下就是GBK.然后使用javac命令來編譯該源文件?!眏avacDemo.java”。Javac也需要java文件,那么javac是使用什 我們的字節(jié)呢?其實javac采用了操作系統(tǒng)默認的GBK編碼解 不會出現(xiàn)亂碼情況。讓我們來做點手腳,在保存Demo.java文件時,我們選擇UTF-8保存。此時Demo.java文件編碼就是UTF-8了。我們再使用”javacDemo.java”來編譯,如果Demo.java里含有中文字符,此時控制臺會出現(xiàn)警告信息,也出現(xiàn)了亂碼。究其原因,就是因為javac采用了GBK編碼我們定我們的編碼。如下:javac-encodingUTF-8Demo.javaEclipsejavaIDEAntjavaAnt也是我常用的編譯java文件的工具。首先,必須知道Ant在其javacjava1AntAntUTF-8javaencoding”UTF-8java<javacdestdir="${classes}"target="1.4"source="1.4"deprecation="off"debug="on"debuglevel="lines,vars,source"optimize="off"encoding="UTF-8">問題三:tomcatjspjsp<%@pagelanguage="java"contentType="text/html;charset=utf-8"pageEncoding亂碼情況。其實這個屬性就是告訴tomcat采用什么編碼來jsp文件的。它jspjsp是GBK編碼的,tomcat文件時采用也是GBK編碼,所以能保證正確的的字節(jié)。不會出現(xiàn)亂碼。如果把pageEncoding設(shè)置為UTF-8,那么 文件過程中轉(zhuǎn)碼就出現(xiàn)了亂碼。上面說我常常不寫pageEncoding這個屬性,但是也沒出現(xiàn)過亂碼,這是怎么回事呢?那是因為如果沒有pageEncoding屬性,tomcat會采用contentType中charset編碼來jsp文件,我的jsp文件編碼通常設(shè)置為UTF-8,contentType的charset也設(shè)置為UTF-8,這樣tomcat使用UTF-8編碼來的jsp文件,二者編碼一致也不會出現(xiàn)亂碼。這只是contentType中charset的一個作用,它還有兩個作用,后面再說??赡苡腥藭枺喝绻壹炔辉O(shè)置pageEncoding屬性,也不設(shè)置contentType的charset屬性那么tomcat會采取什么編碼來 問題二和問題三分析的過程其實就是從源文件àclassunicodeGBKunicode,UTF-8unicode。因為只有采用正確的編碼來轉(zhuǎn)碼才能保證不出現(xiàn)亂碼。JvmjavaSysout.out.println比如:Sysout.out.println(“我們”)。經(jīng)過正確的后”我們”是unicode保存在內(nèi)存中的,但是在向標(biāo)準(zhǔn)輸出(控制臺)輸出時,jvmGBK)unicodeGBKGBK的,不會出現(xiàn)亂碼。在Eclipse中可以設(shè)置控制臺的字符編碼,具置在RunConfiguration框的Common里,我們可以試著設(shè)置為UTF-8,此時的輸出jspout.println()據(jù)<%@pagelanguage="java"contentType="text/html;charset=utf-8"contentTypetomcatHTMLTomcatunicodetomcatcontentTypecharsetHTTPhttpcontentTypecharsetcontentTypecharset1).在沒有pageEncoding屬性時,tomcat使用它來的jsp文件2).tomcat3).為了能更好的理解上面所說的和轉(zhuǎn)碼過程,我們舉一個例子inde

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論